Solución: Warning: is_dir() [function.is-dir]

Editar: administrator/includes/pcl/pclzip.lib.php

Buscar las siguientes lineas:

[php]// —– Create the directory
//–(MAGIC-PclTrace)–//PclTraceFctMessage(__FILE__, __LINE__, 3, “Create directory ‘$p_dir’”);
if (!@mkdir($p_dir, 0777))
{
[/php]

Remplazar por:

[php]

// —– Create the directory
//–(MAGIC-PclTrace)–//PclTraceFctMessage(__FILE__, __LINE__, 3, “Create directory ‘$p_dir’”);
umask(0);
if (!@mkdir($p_dir, 0777))
{
[/php]

Consulta db: Joomla 1.0.X VS Joomla 1.5

Joomla 1.0.X
[php]
global $database;
$database->setQuery( “SELECT * FROM #__mi_tabla” );
$result = $database->loadObjectList();
?>
[/php]

Joomla 1.5
[php]
$db = & JFactory::getDBO();
$db->setQuery( “SELECT * FROM #__mi_tabla” );
$result = $db->loadObjectList();
?>[/php]

¿Como crear una nube de etiquetas usando PHP?

Joomla! + CakePHP = Jake

We are very pleased to announce that the first beta version of Jake 1.0.3 has been released. It is the first package released to the public, and allows you to run any number of CakePHP applications inside your Joomla website, without having to touch your existing code. A lot has been covered and added since the alpha versions, so the best thing you can do is reading the documentation to find out more about this release. Enjoy!

Como instalar Jake:: Puente Joomla!-CakePhp
Como configurar Jake:: Puente Joomla!-CakePhp
Como usar Jake:: Puente Joomla-CakePhp

Evolución histórica de la programación

Dennis Ritchie, Padre de Unix/CVía todo-programacion.com.ar | En el comienzo de la informática, sólo había una forma de programar (en binario), que consistía en la ejecución secuencial (una tras otra) de instrucciones de la máquina, con posibles cambios de secuencia basados en dos tipos especiales de instrucciones de control: instrucciones de transferencia e instrucciones de llamada de subrutina.

En el comienzo de la informática, sólo había una forma de programar (en binario), que consistía en la ejecución secuencial (una tras otra) de instrucciones de la máquina, con posibles cambios de secuencia basados en dos tipos especiales de instrucciones de control.

Las instrucciones de control se dividieron en dos tipos:

  • + instrucciones de transferencia
  • + instrucciones de llamada de subrutina.

Las instrucciones de transferencia dan lugar a un salto sin retorno en la ejecución, y a su vez pueden ser condicionales (si el salto se produce únicamente cuando se cumple una condición determinada) o incondicionales.

La instrucción de llamada de subrutina guarda la dirección de retorno para que la secuencia de ejecución original se reanude cuando termina la ejecución de la subrutina (momento en el que se ejecutará una instrucción de retorno).

En la década de los años cincuenta surgió un nuevo tipo da lenguajes (llamados simbólicos, o de segunda generación: assembler), que trataban de simplificar la programación: ya que, a medida que los programas eran cada vez más complejos, se hacía impracticable utilizar directamente el lenguaje de la máquina, en el que las instrucciones estaban formadas por secuencias de ceros y unos.

Un lenguaje simbólico no es más que una representación codificada del lenguaje de la máquina, donde cada instrucción simbólica se traduce (en principio) por una sola instrucción de la máquina equivalente, y el código de operación y la dirección de memoria asociados a cada instrucción de la máquina se representan mediante símbolos alfanuméricos. En particular, dependiendo del lenguaje simbólico utilizado, las instrucciones de cambio de secuencia se suelen representar mediante los siguientes símbolos:

  • + La instrucción de transferencia incondicional: JMP (jump, es decir, salto); B (branch, ramificación); GOTO (go to, ir a); etc.
  • + Las instrucciones de transferencia condicional: JZ (jump on zero, salto si el resultado anterior es cero); BC (branch on condition, ramificación condicional); etc.
  • + La instrucción de llamada de subrutina: CALL (llamar, en inglés); BAL (branch and link, es decir, ramificación con enlace); etc.
  • + La instrucción de retorno de subrutina: RET (return, retorno); etcétera.

A finales de los años cincuenta, y a medida que las aplicaciones iban creciendo en tamaño y en complicación, la programación en los lenguajes simbólicos resultaba aún demasiado compleja, por lo que se inventaron los lenguajes de alto nivel o de tercera generación, tales como FORTRAN, LISP, COBOL, ALGOL, APL, PL/I, BASIC, Pascal, C, etc., que hacían más legibles los programas mediante expresiones de aspecto matemático, como X + Y * Z (que significa, en muchos de los lenguajes citados, sumar el valor de la variable X al resultado de multiplicar el valor de la variable Y por el de la variable Z).

Todos estos lenguajes, y muchos más que no voy a mencionar por el momento, no son totalmente independientes entre sí, sino que unos influyeron en el diseño de los otros, por lo que forman una jerarquía histórica. Además de simplificar la sintaxis de las expresiones, los lenguajes de alto nivel introdujeron una serie de instrucciones de control para hacer más simple la definición de la estructura de los programas. Estas instrucciones pueden agruparse en las siguientes clases:

  • + Una instrucción de transferencia incondicional (siempre se produce un salto sin retorno en la ejecución), generalmente representada mediante el símbolo GOTO, GO TO, u otro equivalente.
  • + Instrucciones de transferencia condicional, como las sentencias GO TO calculada y asignada de FORTRAN, o la sentencia IF del mismo lenguaje, en su forma original.
  • + Instrucciones de ejecución condicional, como el conjunto IF- THEN-ELSE de ALGOL y Pascal, la instrucción CASE de Pascal o el conjunto if-else y la instrucción switch de C.
  • + Instrucciones de ejecución en bucle, en sus formas DO-UNTIL, DO-WHILE y FOR.
  • + La instrucción de llamada de subrutina, representada mediante el símbolo CALL, o implícitamente, especificando sólo el nombre de la subrutina que se invoca, junto con un conjunto de argumentos entre paréntesis.
  • + La instrucción de retorno de subrutina: RETURN o equivalente.

Wiki dice: La historia de Perl

Larry Wall comenzó a trabajar en Perl en 1987 mientras trabajaba como programador en Unisys  y anunció la versión 1.0 en el grupo de noticias comp.sources.misc el 18 de diciembre de 1987. El lenguaje se expandió rápidamente en los siguientes años. Perl 2, liberado en 1988, aportó un mejor motor de expresiones regulares. Perl 3, liberado en 1989, añadió soporte para datos binarios.

Hasta 1991 la única documentación de Perl era una simple (y cada vez más larga) página de manual Unix. En 1991 se publicó Programming Perl (en inglés) (el libro del dromedario) y se convirtió en la referencia de facto del lenguaje. Al mismo tiempo, el número de versión de Perl saltó a 4, no por marcar un gran cambio en el lenguaje, sino por identificar a la versión que estaba documentada en el libro.

Perl 4 trajo consigo una serie de lanzamientos de mantenimiento, culminando en Perl 4.036 en 1993. En este punto, Larry Wall abandonó Perl 4 para comenzar a trabajar en Perl 5. Perl 4 se quedaría en esa versión hasta hoy.

El desarrollo de Perl 5 continuó en 1994. La lista de correo perl5-porters se estableció en mayo de 1994 para coordinar el trabajo de adaptación de Perl 5 a diferentes plataformas. Es el primer foro para desarrollo, mantenimiento y adaptación de Perl 5.

Perl 5 fue liberado el 17 de octubre de 1994. Fue casi una completa reescritura del intérprete y añadió muchas nuevas características al lenguaje, incluyendo objetos, referencias, paquetes y módulos. A destacar, los módulos proveen de un mecanismo para extender el lenguaje sin modificar el intérprete. Esto permitió estabilizar su núcleo principal, además de permitir a los programadores de Perl añadirle nuevas características.

El 26 de octubre de 1995, se creó el Comprehensive Perl Archive Network (CPAN). CPAN es una colección de sitios web que almacenan y distribuyen fuentes en Perl, binarios, documentación, scripts y módulos. Originalmente, cada sitio CPAN debía ser accedido a través de su propio URL; hoy en día, http://www.cpan.org (en inglés) redirecciona automáticamente a uno de los cientos de repositorios espejo de CPAN.

En 2006, Perl 5 continua siendo mantenido. Características importantes y algunas construcciones esenciales han sido añadidas, incluyendo soporte Unicode, Hilos (threads), un soporte importante para la programación orientada a objetos y otras mejoras. La última versión estable liberada es Perl 5.8.8.

Nombre

Perl se llamó originalmente “Pearl”, por la Parábola de la Perla (en inglés). Larry Wall quería darle al lenguaje un nombre corto con connotaciones positivas; asegura que miró (y rechazó) todas las combinaciones de tres y cuatro letras del diccionario. También consideró nombrarlo como su esposa Gloria. Wall descubrió antes del lanzamiento oficial que ya existía un lenguaje de programación llamado PEARL (en inglés) y cambió la ortografía del nombre.
El nombre normalmente comienza con mayúsculas (Perl) cuando se refiere al lenguaje y con minúsculas (perl) cuando se refiere al propio programa intérprete debido a que los sistemas de ficheros Unix distinguen mayúsculas y minúsculas. Antes del lanzamiento de la primera edición de Programming Perl era común referirse al lenguaje como perl; Randal L. Schwartz (en inglés), sin embargo, forzó el nombre en mayúscula en el libro para que destacara mejor cuando fuera impreso. La distinción fue subsiguientemente adoptada por la comunidad.

El nombre es descrito ocasionalmente como “PERL” (por Practical Extraction and Report Language). Aunque esta expansión ha prevalecido en muchos manuales actuales, incluyendo la página de manual de Perl, es un acrónimos reversos y oficialmente el nombre no quiere decir nada. La ortografía de PERL en mayúsculas es por eso usada como jerga para detectar a individuos ajenos a la comunidad. Sin embargo, se han sugerido varios acrónimos reversos, incluyendo el cómico Pathologically Eclectic Rubbish Lister (Contabilizador de Basura Patológicamente Ecléctico).

El símbolo del dromedario

Perl se simboliza generalmente por un dromedario (camello arábigo), que fue la imagen elegida por el editor O’Reilly para la cubierta de Programming Perl, que por consiguiente adquirió el nombre de El Libro del Dromedario . O’Reilly es propietario de este símbolo como marca registrada, pero dice que usa sus derechos legales sólo para proteger la “integridad e impacto de este símbolo” . O’Reilly permite el uso no comercial del símbolo, y ofrece logos Programming Republic of Perl (ver al lado) y botones Powered by Perl.

Wiki dice: Origen de la programación orientada a objetos

Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. Según se informa, la historia es que trabajaban en simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo las diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar “en marcha” en lugar de tener un sistema basado en programas estáticos.

La programación orientada a objetos tomó posición como la metodología de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++ , una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para los cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.

Seguir leyendo sobre Wiki dice: Origen de la programación orientada a objetos…

PHP Ajax Frameworks x24

(Vía econsultant.com)

  1. AJASON : AJASON is a PHP 5 library and JavaScript client
  2. AjaxAC : AjaxAC is an open-source framework written in PHP
  3. Ajax Agent : powerful open source framework for rapidly building Ajax or Rich Internet Applications (RIA)
  4. Cajax : A PHP class library for writing powerfull reloadless web user interfaces using Ajax (DHTML+server-side) style
  5. CakePHP : Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC.
  6. Claw : a convenient and intuitive way of development of PHP5 driven object oriented applications.
  7. DutchPIPE : PHP object-oriented framework to turn sites into real-time, multi-user virtual environments:
  8. Flexible Ajax : Flexible Ajax is a handler to combine the remote scripting technology, also known as AJAX (Asynchronous Javascript and XML), with a php-based backend.
  9. Guava : Groundwork Guava is a PHP-based application framework and environment.
  10. HTML_AJAX : HTML_AJAX is a PEAR package for performing AJAX operations from PHP.
  11. HTSWaf : The HTS Web Application Framework is a PHP and Javascript based framework designed to make simple web applications easy to design and implement.
  12. My-BIC : My-BIC AJAX State of Mind for PHP harmony
  13. PAJAJ : PHP Asynchronous Javascript and JSON
  14. PAJAX : Remote (a)synchronous PHP objects in JavaScript
  15. phpAjaxTags : phpAjaxTags is a port to PHP from java tag library AjaxTags.
  16. PHPWebBuilder : PHPWebBuilder is a PHP framework designed following well-known object oriented designs and principles featuring a highly reusable components architecture, metadata based persistence and traditional GUI style programming support.
  17. Qcodo : open-source PHP 5 framework
  18. Simple AJAX : This tutorial demonstrates how to perform AJAX functionality simply and effectively, using the AJAX JSMX library, coupled with the JSON-PHP library.
  19. symfony : open-source PHP5 web framework
  20. TinyAjax : TinyAjax is a small php5 library that allows you to easily add AJAX-functionality to existing pages
  21. xajax : Ajax-enable your PHP application with a simple toolkit that gets the job done fast.
  22. XOAD : PHP based AJAX/XAP object oriented framework that allows you to create richer web applications
  23. Zoop : oop is an object oriented framework for PHP based on a front controller. It is designed to be very fast and efficient and very nice for the programmer to work with.
  24. Zephyr : zephyr is an ajax based framework for php5 developers.

SGBON [Sistema de gestión de blog orientado a nada]

Tengo en mente diagramar un pequeño blog en php/mysql que sea base para el blog actual. Mi idea es ir detallando paso a paso la diagramación y el desarrollo del mismo. No será nada del otro mundo, ni muy diferente a los cientos de tipos de blogs que hay disponible en la net, el objetivo principal no es más que una meta personal.

Tratare de ir capitalizando la idea para que no quede simplemente en el hecho de ser una mera idea. Como diría mi amigo Catalán Jordi, ¿hombre, que dices? ;)

Libreria: Libchart

Vía baluart encuentro un enlace a una interesante librería de php llamada libchart la cual nos permite realizar gráficos de barra, circulares, lineales, de forma rápida y dinámica.

Ejemplo de uso:

[php]

// Cargo la libreria
include "../libchart/libchart.php";

// Tipo de grafico
$chart = new LineChart();

// Marco los puntos que se van a graficar
$chart->addPoint(new Point(”22/09/2006″, 64));
$chart->addPoint(new Point(”22/09/2006″, 72));
$chart->addPoint(new Point(”23/09/2006″, 52));
$chart->addPoint(new Point(”24/09/2006″, 52));
$chart->addPoint(new Point(”25/09/2006″, 82));
$chart->addPoint(new Point(”26/09/2006″, 60));
$chart->addPoint(new Point(”27/09/2006″, 68));
$chart->addPoint(new Point(”28/09/2006″, 71));
$chart->addPoint(new Point(”29/09/2006″, 59));
$chart->addPoint(new Point(”30/09/2006″, 55));

$chart->setTitle(”delirius.com.ar: Visitas registradas en los últimos 10 días del mes de Septiembre”);
$chart->render(”generar/visitas_mes_septiembre.png”);

?>[/php]

Resultado final:

¿Fácil verdad? ¿Que esperas para poder mostrar tus datos estadísticos de manera mas profesional? ;)

C: La instrucción de selección if..else

La introducción de selección if realiza una acción indicada, solo cuando la condición es verdadera; de lo contrario, se ignora dicha acción. La instrucción if..else permite al programador especificar que se realizarán acciones diferentes cuando la condición sea verdadera y cuando la condición sea falsa. Por ejemplo, la instrucción en pseudocódigo:

If calificación del estudiante es mayor o igual que 60
Imprime “Aprobado”
else
Imprime “Reprobado”

Imprime Aprobado si la calificación del estudiante es mayor o igual que 60, e imprime Reprobado si la calificación del estudiante es menor que 60. En cualquiera de los casos, después de que ocurre la impresión, se ejecuta la siguiente instrucción del pseudocódigo. Observe que también el cuerpo del else esta sangrado. Independientemente de la convención de sangrado que utilice, debe utilizarla con cuidado a lo largo de sus programas. Es difícil leer un programa que no obedece reglas uniformes de espaciado.

La instrucción del if..else del pseudocódigo anterior se puede escribir en C como:

[C]
if ( calificacion >= 60 )
printf( “Aprobado\n” );
else
printf( “Reprobado\n” );
[/C]

Fuente: Mis libros: C/C++ Como Programar (Cuarta Edición) por Pearson

Nota: Lamentablemente wordpress no me permite sangrar correctamente los códigos, luego adjuntare capturas del mismo para que se pueda ver claramente la importancia del sangrado.

Php/Mysql: Funciones de conexiones básicas. I

mysql_connect() : Crea una conexión a un servidor MySQL. Adopta tres argumentos de cadena:

- Nombre de Host
- Nombre de Usuario
- Contraseña de Usuario

La función devuelve un identificador de enlace cuando se conecta correctamente al servidor MySQL especificado (o un null si se produce un error.)

[php]$conexion_db = mysql_connect(”localhost”, “gustavo”, “abcd”);[/php]

mysql_close() : El vínculo con el servidor MySQL se cierra cuando finaliza la secuencia de comandos. Si desea cancelar antes la conexión, utilice esta función, con el identificador de enlace como argumento:

[php]mysql_close($conexion_db)[/php]

mysql_list_dbs() : El equivalente en PHP del comando SHOW DATABASES de MySQL. Tiene un solo argumento opcional, el identificador de enlace. Devuelve un puntero a la matriz que contiene los nombres de las bases de datos disponibles.

[php] $resultado = mysql_list_dbs($conexion_db);[/php]

mysql_select_db() : Se utiliza para seleccionar una base de datos. Devuelve true si es satisfactoria y false en caso contrario. Adopta el nombre de la base de datos como argumento aunque se puede utilizar un argumento de identificador de conexión opcional. Ejemplo:

[php]$conexion_db = mysql_connect(”localhost”,”gustavo”,”abc”);
if(mysql_select_db(”mysql”, $conexion_db)) echo “Conectado a localhost”;
else die (”No se puede realizar la conexión”);[/php]

Fuente: Mis libros: FUNDAMENTOS PHP 5
Nota: Texto borrador con agregados personales, falta aclarar y brindar mas ejemplos.

Normalización. Parte I

La normalización se define como el proceso de dividir los datos en diferentes tablas para minimizar el número de veces que es necesario repetir los mismos datos. Las formas normales son grados de normalización y están sujetas a una serie de reglas que se pueden resumir de la siguiente forma.

Primer Forma Normal (1FN)
- Crear una nueva tabla para cada nuevo conjunto de datos relacionados que se quiera almacenar.
- Eliminar información repetida de una tabla.
- Identificar a los registros de forma exclusiva por medio de una clave principal .

Fuente: Mis libros: FUNDAMENTOS PHP 5

Upcoming changes in PHP 6.0

Acabo de leer en Phphacks un excelente resumen de los cambios que se vendrán con Php 6.0. Gracias a diego ya tenemos la traducción del articulo.

EL mundo PHP esta realmente exaltado por la próxima versión de PHP, la 6.0 . Mas allá de las incertidumbres propias de cada nueva versión, PHP 6.0 parece deshacerse de 3 rasgos que siempre dieron problemas: register_globals, magic_quotes_gpc y safe_mode.

El primero fue un gran hueco de seguridad, el segundo interfería con los datos y hacía el cambio de ambientes bastante difícil, mientras que la 3era era usualmente malinterpretada y creaba una falsa sensación de seguridad. Hay también bastante trabajo previsto para hacer con Unicode.

Seguir leyendo sobre Upcoming changes in PHP 6.0…

Analizando Php.ini. Parte I

max_execution_time = Ejecución máxima de cada secuencia de comandos en segundos.

max_input_tiem = Tiempo máximo de análisis de los datos solicitados por parte de cada secuencia de comandos.

memory_limit = Memoria máxima que puede consumir una secuencia de comandos.

Configuración por defecto:

max_execution_time = 30
max_input_tiem = 60
memory_limit = 8 M