lunes, julio 02, 2007
martes, junio 26, 2007
Redimencionar una Imagen en PHP
function redimensionar($original,$destino,$anchura)
{
//calculamos la altura proporcional
$datos = getimagesize($original);
$ratio = ($datos[0] / $anchura);
$altura = round($datos[1] / $ratio);
// esta será la nueva imagen reescalada
$thumb = imagecreatetruecolor($anchura,$altura);
$img = imagecreatefromjpeg($original);
// con esta función la reescalamos
imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
// la guardamos con el nombre y en el lugar que nos interesa.
imagejpeg($thumb,$destino);
}
Guardar una imagen y su miniatura a un campo Blob de mysql
El siguiente codigo no es mio, pero hace mas de dos años programe un modulo así, es muy interesante.
Para crear la miniatura necesitamos la Librería Gráfica GD, en este script estamos usando la versión 2.0.28 de esta librería.
Si esta librería está activada, en el phpinfo()
debe salir algo como esto:
Si no la tenemos activada solo tenemos que modificar el archivo php.ini que se encuentra en C:\Windows (puede variar según tu versión de Windows), y agregar la línea extension=php_gd2.dll
en la sección "Dynamic Extensions". El archivo php_gd2.dll debe estar en la carpeta "extensions" dentro del directorio donde instalaste el php, por ejemplo "C:\php\extensions". Si no tienes el archivo php_gd2.dll, te lo puedes descargar aquí.
El formulario de upload y el script php está en una sola página, la nombré como blob.php, empezemos entonces:
// Verificamos que el formulario no ha sido enviado aun
$postback = (isset($_POST["enviar"])) ? true : false;
if($postback){
// Nivel de errores
error_reporting(E_ALL);
// Constantes
# Altura de el thumbnail en pÃxeles
define("ALTURA", 100);
# Nombre del archivo temporal del thumbnail
define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podrÃa ser:
// define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
# Servidor de base de datos
define("DBHOST", "localhost");
# nombre de la base de datos
define("DBNAME", "test");
# Usuario de base de datos
define("DBUSER", "root");
# Password de base de datos
define("DBPASSWORD", "");
// Mime types permitidos
$mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
// Variables de la foto
$name = $_FILES["foto"]["name"];
$type = $_FILES["foto"]["type"];
$tmp_name = $_FILES["foto"]["tmp_name"];
$size = $_FILES["foto"]["size"];
// Verificamos si el archivo es una imagen válida
if(!in_array($type, $mimetypes)) die("El archivo que subiste no es una imagen válida");
// Creando el thumbnail
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmp_name);
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmp_name);
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmp_name);
break;
$datos = getimagesize($tmp_name);
$ratio = ($datos[1]/ALTURA);
$ancho = round($datos[0]/$ratio);
$thumb = imagecreatetruecolor($ancho, ALTURA);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA, $datos[0], $datos[1]);
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
imagejpeg($thumb, NAMETHUMB);
break;
case $mimetypes[2]:
imagegif($thumb, NAMETHUMB);
break;
case $mimetypes[3]:
imagepng($thumb, NAMETHUMB);
break;
}
// Extrae los contenidos de las fotos
# contenido de la foto original
$fp = fopen($tmp_name, "rb");
$tfoto = fread($fp, filesize($tmp_name));
$tfoto = addslashes($tfoto);
fclose($fp);
# contenido del thumbnail
$fp = fopen(NAMETHUMB, "rb");
$tthumb = fread($fp, filesize(NAMETHUMB));
$tthumb = addslashes($tthumb);
fclose($fp);
// Borra archivos temporales si es que existen
@unlink($tmp_name);
@unlink(NAMETHUMB);
// Guardamos todo en la base de datos
#nombre de la foto
$nombre = $_POST["nombre"];
$link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
mysql_select_db(DBNAME, $link) or die(mysql_error($link));
$sql = "INSERT INTO tabla(nombre, foto, thumb, mime) VALUES ('$nombre', '$tfoto', '$tthumb', '$type')";
mysql_query($sql, $link) or die(mysql_error($link));
echo "Fotos guardadas";
exit();
}
?>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Imagen a Blob</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="frmimage" id="frmimage" method="post"
enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>">
Nombre: <input type="text" id="nombre" name="nombre" /><br />
Imagen: <input type="file" id="foto" name="foto" /><br />
<input type="submit" name="enviar" id="enviar" value="Guardar" />
</form>
</body>
</html>
Fuente
lunes, junio 18, 2007
Identificar en PHP si se Usa Internet Explorer
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE"))
{
echo "Usas Internet Explorer";
}
?>
viernes, junio 08, 2007
Manual de Stored Procedures en MySQL
Desde esta página pueden encontrar un manual PDF en inglés muy bueno, donde aprenderemos el manejo de Stored Procedures en MySQL 5.x, ya que no es tan facil conseguir estos tipos de manuales. Creanme, si tienen más acepto aportaciónes.
Libros AJAX, JavaScript, CSS, XHTML en Linea
La web llamada librosweb.es, nos da la oportunidad de aprender 4 lenguajes con los cuales podemos DOMINAR EL MUNDO... bueno, eso diría cerebro a pinky... yo solo les puedo decir que son la base de toda Web 2.0... y si aprendemos a manejarlos Dominaremos el mercado web... por lo menos en nuestra zona :-D.
A APRENDER TECNOSIS, no nos quedemos atras...
viernes, junio 01, 2007
Cargar Windows XP sobre Linux Ubuntu
Ya tienes ubuntu instalado y como te gusta?
Ya tienes XGL funcionando y tus amigos Windowseros se mueren de envidia de como se hacen gelatina tus menus, ventanas y todo?
Pero aun tienes una partición de Windows porque te dejan tarea en Autocad, te mandan trabajos con WordArt y no se ve muy lindo con OpenOffice? Te da miedo que necesites Windows un dia y no tenerlo instalado? (Asi como los condones, mejor tenerlos y no usarlos que necesitarlos y no tenerlos)
Pues ya podrás deshacerte de tu partición de Windows, Si asi es, gracias a este tutorial para instalar VMWare Server, con el cual, podremos instalar Windows XP en nuestro ubuntu, Antes utilizaba VMWare Player pero esto es mucho mejor:
Esto es solamente para poner a trabajar una Máquina Virtual en un escritorio local, por lo que omito la parte de administración remota. El Fin de esto es simplemente instalar Windows XP en nuestro ubuntu. Si deseas ejecutar tareas un poco mas avanzadas, sería buena idea seguir este otro en tutorial howtoforge hasta la segunda parte, de administración remota.
Ok, comencemos entonces. Primero instalaremos algunos paquetes necesarios, dependiendo de los paquetes que tengamos y los que no, esto puede tardar cierto tiempo. para esto abrimos una consola y ejecutamos:
sudo apt-get install linux-headers-`uname -r` build-essential xinetd
(Este paso es indispensable para continuar, por lo menos en mi caso, si ya tienes estas herramientas úedes omitir este paso, aunque no se incluía oficialmente en el how-to; y es básicamente instalar las fuentes del kernel que estoy usando, mas herramientas de compilación)
sudo apt-get install linux-kernel-headers libx11-6 libx11-dev libxtst6 xlibs-dev xinetd wget
sudo apt-get install gcc binutils-doc cpp-doc gcc-4.0-locales make manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.0-doc libc6-dev-amd64 lib64gcc1
En cuanto se instalen podremos continuar con el siguiente paso, que es crear una carpeta para nuestras máquinas Virtuales, si tu estas usando VMWare Player no debes tocar tu partición Virtual Ok:
sudo mkdir /var/vm
Ahora debemos obtener VMWare Server, que es gratuito (almenos por ahora). Para eso vamos a la página: http://www.vmware.com/download/server/ donde debemos registrarnos (gratuitamente) para obtener un serial (que será necesario durante la instalación).
a continuación se nos presenta un vínculo para descargar VMWare, sin embargo al ser un archivo de 100MB, es buena idea usar wget, o usar DDM. la forma sencilla es dar click derecho en el vínculo y seleccionar “copiar dirección del enlace” para despues pegarlo en la consola, precedido de wget; en mi caso y para la versión que estaba disponible al momento de la descarga, el comando era:
wget http://download3.vmware.com/software/vmserver/VMware-server-1.0.0-28343.tar.gz
Es importante copiar nuevamente la dirección en lugar de usar el comando anterior exactamente como está, porque asi nos aseguramos de tener la versión mas reciente.
Dependiendo de tus amigos de VTR esto puede durar varios minutos o unas horas, asi que hay que tomarselo con calma es buena idea prepararse un Café o tomarse unas Chelas para el calor.
Una vez descargado, debemos descomprimirlo, en mi caso el comando usado fué:
tar xvfz VMware-server-1.0.0-28343.tar.gz
De nueva cuenta, si la versión que descargaste no concuerda, modificala para que se ajuste a tu caso. la forma sencilla de hacerlo es escribir hasta server y despues presionar la tecla tab para autocompletar.
Despues de que se hayan descomprimido los chorrocientosmil archivos contenidos en el tar, debemos cambiarnos al interior de la carpeta recien desempaquetada:
cd vmware-server-distrib
y ahora, para instalar el programa, ejecutamos el script de instalación… pero como super usuario (yo lo hice con sudo sin mayor problema; aunque algunos dicen debe ser como root)
sudo ./vmware-install.pl
esto inicia el script de instalación, que nos hará una serie de preguntas a las que debemos responder. Aqui copiaré lo que indica el how-to original, ya que es muy acertado:
Creating a new installer database using the tar3 format.
Installing the content of the package.
In which directory do you want to install the binary files?
[/usr/bin] <– /usr/bin
What is the directory that contains the init directories (rc0.d/ to rc6.d/)?
[/etc] <– /etc
What is the directory that contains the init scripts?
[/etc/init.d] <– /etc/init.d
In which directory do you want to install the daemon files?
[/usr/sbin] <– /usr/sbin
In which directory do you want to install the library files?
[/usr/lib/vmware] <– /usr/lib/vmware
The path “/usr/lib/vmware” does not exist currently. This program is going to
create it, including needed parent directories. Is this what you want? [yes] <– yes
In which directory do you want to install the manual files?
[/usr/share/man] <– /usr/share/man
In which directory do you want to install the documentation files?
[/usr/share/doc/vmware] <– /usr/share/doc/vmware
The path “/usr/share/doc/vmware” does not exist currently. This program is going
to create it, including needed parent directories. Is this what you want?
[yes] <– yes
The installation of VMware Server 1.0.0 build-28343 for Linux completed
successfully. You can decide to remove this software from your system at any
time by invoking the following command: “/usr/bin/vmware-uninstall.pl”.
Before running VMware Server for the first time, you need to configure it by
invoking the following command: “/usr/bin/vmware-config.pl”. Do you want this
program to invoke the command for you now? [yes] <– yes
Making sure services for VMware Server are stopped.
Stopping VMware services:
Virtual machine monitor done
You must read and accept the End User License Agreement to continue.
Press enter to display it.
….. snip [LICENCE TEXT] ……
Do you accept? (yes/no) <– yes
Thank you.
Configuring fallback GTK+ 2.4 libraries.
In which directory do you want to install the mime type icons?
[/usr/share/icons] <– /usr/share/icons
The path “/usr/share/icons” does not exist currently. This program is going to
create it, including needed parent directories. Is this what you want? [yes] <– yes
What directory contains your desktop menu entry files? These files have a
.desktop file extension. [/usr/share/applications] <– /usr/share/applications
The path “/usr/share/applications” does not exist currently. This program is
going to create it, including needed parent directories. Is this what you want?
[yes] <– yes
In which directory do you want to install the application’s icon?
[/usr/share/pixmaps] <– /usr/share/pixmaps
(En la siguiente sección, la instalación no encontró un modulo apropiado para mi, asi que lo compiló. en realidad solo fue necesario:
1) indicar la ruta al código fuente del kernel, en mi caso: /usr/src/linux-headers-2.6.17-10-Generic/include ; hay que notar que esto puede variar considerablemente con las diversas actualizaciones, asi que será necesario verificarlo antes de indicar cualquier cosa.
2) establecer el compilador a usar (acepté los valores por omisión y funcionaron sin mayor problema).
Despues de eso, no fue necesario proporcionar mas información a este respecto, aunque fue necesario compilar algunas otras cosas en el proceso, pero esto ya se realizó de manera automática)
Trying to find a suitable vmmon module for your running kernel.
The module bld-2.6.17-10-generic loads perfectly in the running
kernel.
Do you want networking for your virtual machines? (yes/no/help) [yes] <– yes
Configuring a bridged network for vmnet0.
The following bridged networks have been defined:
. vmnet0 is bridged to eth0
All your ethernet interfaces are already bridged.
Do you want to be able to use NAT networking in your virtual machines? (yes/no)
[yes] <– yes
Configuring a NAT network for vmnet8.
Do you want this program to probe for an unused private subnet? (yes/no/help) <– yes
Probing for an unused private subnet (this can take some time)…
The subnet 192.168.246.0/255.255.255.0 appears to be unused.
The following NAT networks have been defined:
. vmnet8 is a NAT network on private subnet 192.168.246.0.
Do you wish to configure another NAT network? (yes/no) [no] <– no
Do you want to be able to use host-only networking in your virtual machines?
[yes] <– yes
Configuring a host-only network for vmnet1.
Do you want this program to probe for an unused private subnet? (yes/no/help)
[yes] <– yes
Probing for an unused private subnet (this can take some time)…
The subnet 172.16.37.0/255.255.255.0 appears to be unused.
The following host-only networks have been defined:
. vmnet1 is a host-only network on private subnet 172.16.37.0.
Do you wish to configure another host-only network? (yes/no) [no] <– no
Trying to find a suitable vmnet module for your running kernel.
(aqui es donde fue necesario compilar el otro módulo, pero por omisión tomólos valores proporcionados en el comentario anterior. En caso de que no fuera asi, solo es necesario repetir las respuestas)
The module bld-2.6.17-10-Generic loads perfectly in the running
kernel.
Please specify a port for remote console connections to use [902] <– 902
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
Configuring the VMware VmPerl Scripting API.
Building the VMware VmPerl Scripting API.
Using compiler “/usr/bin/gcc”. Use environment variable CC to override.
Installing the VMware VmPerl Scripting API.
The installation of the VMware VmPerl Scripting API succeeded.
Generating SSL Server Certificate
In which directory do you want to keep your virtual machine files?
[/var/lib/vmware/Virtual Machines] <– /var/vm
Please enter your 20-character serial number.
Type XXXXX-XXXXX-XXXXX-XXXXX or ‘Enter’ to cancel: <– Tu Serial de VMware Server
Starting VMware services:
Virtual machine monitor done
Virtual ethernet done
Bridged networking on /dev/vmnet0 done
Host-only networking on /dev/vmnet1 (background) done
Host-only networking on /dev/vmnet8 (background) done
NAT service on /dev/vmnet8 done
The configuration of VMware Server 1.0.0 build-28343 for Linux for this running
kernel completed successfully.
Ok ya tienes VMWare instalado en tu ubuntu. Ahora, para correrlo, está disponible en Aplicaciones / herramientas del sistema / VMWare server console.
Ahora falta instalar Windows; pero todos ustedes han instalado Win alguna vez en su vida no me vengan con cuentos a mi ok.
En todo caso el procediendo es este
Install enter
Siguiente, siguiente, siguiente, etc, etc, etc… y asi .
...Finalizar
Extraido tal cual de | antofalinux.cljueves, mayo 24, 2007
PHP y MySQL Videotutoriales (Imagen ISO)
Quieres iniciar desde CERO, esta es la opcion que te lleva de la mano hasta el maravilloso mundo de la programación Web.
Seguímos en Línea.
Curso de Ajax en Videotutoriales (Imagen ISO)
Tienes el futuro a tu alcance, pues Ajax da agilidad y mejor presentación a tus páginas web. ¿Quieres un Ejemplo?... Google es el mejor que existe, sus aplicaciones como la nueva version de Analytics esta creada con Ajax dandonos a nosotros como usuarios una gran interactividad con el sitio. Y ni que decir de la página personalizada de google, que ahora cuenta hasta con manejo de temas "para hacer mas bonita la visita :P".
Que lo disfruten.
Seguímos en Línea.
viernes, mayo 18, 2007
TRUCOS PARA WINDOWS XP
Este truco liberara la memoria y el disco para que puedan accesar mas rapido a los programas
Buscamos en el editor del registro la siguiente cadena
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Memory Management
Buscan en el panel derecho la entrada DisablePagingExecutive y hacemos doble clic sobre ella
cambiamos el valor de 0 a 1 y pulsamos aceptar reiniciamos la compu y listo
La tecla del logotipo Windows permite crear accesos directos para los siguientes comandos:
a.. Tecla del logotipo de Windows: Muestra el menú Inicio
b.. Tecla del logotipo de Windows + D: Minimiza o restaura todas las ventanas
c.. Tecla del logotipo de Windows + E: Muestra el Explorador de Windows
d.. Tecla del logotipo de Windows + F: Muestra Buscar archivos
e.. Tecla del logotipo de Windows + Ctrl + F: Muestra Buscar equipo
f.. Tecla del logotipo de Windows + F1: Muestra Centro de ayuda y soporte técnico
g.. Tecla del logotipo de Windows + R: Muestra el cuadro de diálogo Ejecutar
h.. Tecla del logotipo de Windows + Inter Muestra el cuadro de diálogo Propiedades del sistema
i.. Tecla del logotipo de Windows + Mayús + M: Deshace minimizar todas las ventanas
j.. Tecla del logotipo de Windows + L: Bloquea la estación de trabajo
k.. Tecla del logotipo de Windows + U: Abre el Administrador de utilidades
Acelerar la exploración de equipos en red e incrementar el rendimiento general
Desde los tiempos de Windows 2000, existe un bug por el cual al explorar contenidos de ordenadores remotos, el sistema busca además de los archivos compartidos las tareas programadas de la máquina, con lo que podemos experimentar retrasos de hasta 30 segundos cuando intentamos ver los archivos compartidos desde una red Para que sistema no busque las tareas programadas en equipos de red al explorar sus recursos compartidos, iniciaremos la herramienta de edición del sistema, con el comando “regedit.exe” desde el menú Inicio/Ejecutar y localizaremos la clave HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/ Explorer/RemoteComputer/NameSpace/{D6277990…}. En primer lugar, dentro del menú registro, seleccionaremos la opción Exportar rama de forma que podamos restaurar esta característica en caso necesario. Acto seguido borraremos la clave. NOTA: Al eliminar esta clave, eliminaremos la posibilidad de ver y administrar tareas programadas en ordenadores remotos. También relacionado con el rendimiento de las conexiónes a través de red, podemos incrementar el número de búffers que el redirector reservará para el rendimiento de la red, incrementando de esta manera el caudal de datos que podrá administrear. Cada hilo extra que configuremos hará uso de 1k adicional de memoria no paginada, pero únicamente si la aplicación está haciendo uso de ellos. Para configurar el número de búffers e hilos adicionales iniciaremos la herramienta de edición del sistema, con el comando “regedit.exe” desde el menú Inicio/Ejecutar y localizaremos la clave HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Services\LanmanWorkstation\Parameters. Allí crearemos un o modificaremos los valores DWORD "MaxCmds" y "MaxThreads", cuyo contenido deberá ser el mismo en ambos, el valor por defecto es 15 y el rango que podemos especificar va desde 0 hasta 255.
Mejorar ancho de banda del XP Professional
Windows XP se reserva el 20% del ancho de banda disponible, con el fin de ejecutar aplicaciones especiales. La “retención” se produce mediante el denominado el programador de paquetes QoS (Quality of Service – Calidad del Servicio), encargado de la optimización de redes locales.
Sin embargo, para los usuarios privados, que sólo tienen un PC en casa, QoS no es una función necesaria; sino todo lo contrario. Windows XP reserva el 20% del ancho de banda aunque el usuario cancele la función QoS. También se puede optar por desintalar el Programador de paquetes QoS si no tenemos ninguna Red Local.
Resumiendo viene a decir: El QoS (calidad del servicio) es una función bastante comun en Internet, se usa para garantizar que unas transferencias no bloquean a otras. En Windows XP el protocolo reserva un máximo de un 20% del ancho de banda para paquetes de alta prioridad, de forma que estos siempre puedan transmitirse. Esto hace posible que por ejemplo, podamos estar descargando 2 ficheros de dos servidores a la vez, y mientras usar el IRC o el messenger y que los mensajes que enviamos y nos envian lleguen sin retraso. Si no hay paquetes de alta prioridad, ese ancho de banda se usa para transmitir paquetes normales.
1) Entrar como administrador.
2) Inicio, ejecutar, escribid: gpedit.msc
3) Aparecen las directivas de grupo, id a Configuración de Equipo.
4) Plantillas Administrativas
5) Red (Network)
6) Programador de Paquetes Qos
7) Doble click en Limitar el ancho de banda reservado
8) Habilitarlo y poner el 0% en Límite de Ancho de Banda.
9) Aplicar y Aceptar
10) Id a propiedades red y comprobad que está marcado el Programador de Paquetes Qos.
martes, mayo 15, 2007
Manejo de Stored Procedures en Delphi
Existen varias formas de llamar un Stored Procedure (Procedimiento Almacenado) en
Delphi, pero yo usaré la más fácil, con el uso de un ZTQuery. Esto tambien se puede hacer de la misma manera con componentes ADO, pero para este ejemplo usaré las librerías Zeos.
La sintaxis de un Stored en MySQL es la siguiente:
NOTA: El siguiente stored inserta el registro de un cliente en la tabla T_CLIENTES
CREATE PROCEDURE `sp_ClientesInserta`
(
IN `pid_cliente` bigint(11),
IN `pnombre` varchar(100),
IN `prfc` varchar(20),
IN `pdireccion` varchar(100),
IN `pcp` varchar(10),
IN `pciudad` varchar(50)
)
BEGIN
/* Inserta nuevo registro*/
Insert into t_clientes (nombre, rfc, direccion, cp, ciudad) values (pnombre, prfc, pdireccion, pcp, pciudad);
END
Con código rojo destaco el nombre del Procedimiento Almacenado, en verde se muestran cada uno de los parametros y dentro de Begin y End van nuestras sentencias SQL.
Tambien podemos hacerle una modificacion donde se valide primeramente si ya existe el mismo RFC en la tabla antes de insertarlo.
CREATE PROCEDURE `sp_ClientesInserta`
(
IN `pid_cliente` bigint(11),
IN `pnombre` varchar(100),
IN `prfc` varchar(20),
IN `pdireccion` varchar(100),
IN `pcp` varchar(10),
IN `pciudad` varchar(50)
)
BEGIN
/*Valida Existencia de RFC*/
Declare vContador varchar(20);
Select vContador=count(*) From t_clientes Where rfc=prfc;
/* Inserta nuevo registro*/
IF vContador <=0 then
Insert into t_clientes (nombre, rfc, direccion, cp, ciudad) values (pnombre, prfc, pdireccion, pcp, pciudad);
END IF;
END
Ahora con azul contabilizamos los registros que coincidan con el RFC que enviamos de parámetro, si existe alguno no se inserta (con amarillo).
Ya que tenemos nuestro Stored Procedure lo llamamos con la sentencia CALL.
call sp_ClientesInserta(1,'Jesús Feran','XXXXXXXXXXXX','Tecnosis MX', 555555,'SJR');
Ahora lo unico que resta es llamarlo en un ZTQuery desde delphi.
Active:=False;
Connection:=ZConnection1;
Close;
SQL.Clear;
SQL.Add("call sp_ClientesInserta(1,'Jesus Feran','XXXXXXXXXXXXX','Tecnosis MX', 56500,'SJR');");
ExecSQL;
Close;
Y según yo, ya es todo, con eso envian parámetros a un stored desde delphi.
Espero les sirva, nos vemos.
NOTA: Se pueden crear Stored Procedures con el asistente de MySQL Maestro, pero se me hace muy tardado, aun que seguro.
Seguímos en Linea.
sábado, mayo 12, 2007
Instalando lo necesario para ASP.NET
-IIS
Para instalar el IIS nos vamos a Panel de Control / Agregar o Quitar Programas y luego en Agregar o quitar componentes de Windows.
Agregamos el que dice Servicios de Internet Information Server (IIS), podemos darle en Detalles y asegurar que se instale el Servicio World Wide Web.
Y ya :P
-Framework .NET
El Framework 1.1 normalmente se instala en alguna actualizacion de Windows XP y ya viene en el Service Pack 2 por defecto, o sea que no hay mucha bronca, pueden checar si lo tienen entrando en Panel de control - Herramientas Administrativas y ahi deben de tener dos accesos directos, uno que diga "Microsoft .NET Framework 1.1 Configuration" y el otro "Microsoft .NET Framework 1.1 Wizards". Si no los tienen descarguense el Framework 1.1 de aqui.
-Lenguaje con soporte para .NET
Pues ya nada más instalan el lenguaje que vayan a usar, en este caso el Delphi 2006, luego les paso el Studio Completo del Borland Delphi 2006, si no mientras lo pueden bajar del E-mule :P jeje.
viernes, mayo 11, 2007
Busqueda Incremental en Delphi
Es decir, tenemos una tabla de la siguiente manera:
ID - Nombre
1 Miguel
2 Martin
3 Jerry
4 Tadeo
5 Jesus
En el edit escribimos JE y en el grid solo nos apareceran:
ID - Nombre
3 Jerry
5 Jesus
Pues ahora filtramos los campos solamente con los que empiecen con JE.
Esto se realiza con un LIKE en SQL que sería así:
El codigo queda en el evento OnChange del Edit.
procedure TLaForma.edt_nombreChange(Sender: TObject);
var
vstrCadena: String;
begin
vstrCadena:= 'Select id, nombre from tabla Where nombre LIKE '+char(39)+'%'+edt_nombre.Text+'%'+char(39);
with ZQ_Consulta do
begin
Close;
SQL.Clear;
SQL.Add(vstrCadena);
try
Open;
except
ShowMessage('No se pudo ejecutar la consulta');
end;
end;
end;
Donde mi ZQ_Consulta es un TZQuery. Igual funciona para un TADOQuery normal.
jueves, mayo 10, 2007
ASP .NET
Primero vamos a explicar a groso modo que es .NET, más adelante daremos algunos ejemplos de esta plataforma:
Para empezar hay dos formas de desarrollar aplicaciones .NET, una es en la Web (ASP.NET) y la otra desarrollando aplicaciones de escritorio (si también se puede!!) que ya no se llaman Aplicaciones sino WinForms, aqui es igual son archivos .exe, y es practicamente igual que programar en un visual pero usando librerías de .NET.
(Los ejemplos que pondré después serán solo para ASP.NET porque es el que he estado trabajando, como ya les dije WinForms es casi igual que otro lenguaje visual)
Hay que decir que a pesar que la plataforma se llama ASP.NET (.NET pa' abreviar), no tiene nada que ver con el Lenguaje ASP desarrollado por Microsoft, o sea que no programaremos en ASP, por el contrario vamos a programar en el Lenguaje que tenga soporte para .NET, ya sea VisualBasic, Delphi, C#, etc.
Uno de los propósitos de esta plataforma es estandarizar la programación, porque aunque se programa en diferentes lenguajes, se usan los mismos "uses" o librerías (que aqui ya se llaman namespaces) ya sea para Delphi, VB, C#, etc. Así las diferencias entre la programación en .NET se reduce a la diferencia entre como declarar variables, crear objetos, etc. en cada lenguaje, pero la lógica es la misma.
Que ventajas tiene ASP.NET? pues muchas, primero es un lenguaje orientado totalmente a objetos (y yo que nunca le puse atención a Domingo :(...) la programación es mucho más fácil, es código precompilado, por lo cual es más rápido, todo lo pesado lo hace el servidor :-D.
Para que quede más claro: cuando programas en ASP.NET, se generan principalmente dos archivos por página: el .aspx (la página con código HTML y toda la onda) y el archivo del código programado (.pas para Delphi). Cuando se hace una petición a la página la hacemos a través del .aspx, y cuando se requiere se hace uso del .pas que esta "mezclado" en el aspx, así en realidad programas en Delphi y cada que se ejecute se compila solo esa parte que se requiere haciendo todo más rápido y fácil.
Para poder trabajar con ASP.NET se necesitan principalmente 3 cosas:
1-Una computadora... =S ah chinga jajajaja
no en serio:
1.-El lenguaje que soporte .NET
2.-El Framework de .NET
3.-Un servidor Web
Aquí los que vamos a usar son:
1.- Delphi 2006 (que es el único Delphi con buen soporte para .NET)
2.- El framework 1.1 (el más nuevo es el 3 y el más usado en los ultimos tiempos el 2, pero Delphi sólo es compatible con Framework 1.1)
3.- El IIS (este porque viene por defecto en todos los Windows XP, y en cuanto a características no tiene nada que pedirle a Apache... además este es más fácil de configurar y administrar :P)
En el siguiente post, les pondré como configurar e instalar lo necesario para empezar a programar, saludos.
miércoles, mayo 09, 2007
Zeos Lib Librerías de conexión libres para Delphi
Me encuentro con la belleza de Zeos Lib (Zlib), que son librerías Open Source para conexiónes de Delphi con MySQL, Postgress, Firebird entre otros. La libreria la puedes descargar desde aqui, y les dejo un tutorial llamado: "Cómo Instalar Zeos Lib y no morir en el intento"(link actualizado el 06 Noviembre del 2009), muy directo y facil de usar... con unos pequeños ejemplos de su uso.
La desventaja según el manual de usar Zlib es que no viene con ayuda sobre los componentes... ni modo, prueba y error (como si fuera nuevo este metodo para nosotros).
Bendito Dios que creo Open Source :-D
Editado:
Al instalar y seguir los pasos del manual me encontre con un problema, donde el archivo ZPlainMysql.inc se encontraba bloqueado al compilar un packeage, nuevamente busque la solucion y encontre la siguiente:
Descargue el archivo ZEOSLIB_TESTING_REV240.zip de ZeosDownloads, al descomprimir el archivo fui a la carpeta SRC y despues a PLAIN, en copie todo el contenido de esta carpeta y lo pase a la carpeta PLAIN pero del primer packeage que descargue (De la version 6.6.1).
Nuevamente repeti los pasos del manual y todo quedo a la perfección.
martes, mayo 08, 2007
Liberación de memoria en Delphi
1.- Vamos al menú Project / Options
2.- En la lista de Auto-create forms seleccionamos solamente las formas que se deben crear al iniciar el proyecto. Dejando en la lista Aviable forms las formas que crearemos solo al mandarlas llamar.
3.- Para llamar una forma (crearla) hacemos lo siguiente:
Forma:=TForm.Create(nil); //Creamos la forma
Forma.Show; //Mostramos la forma
4.- Para eliminar la forma de memoria hacemos lo siguiente:
Forma.Free;
5.- El FREE elimina la forma de memoria y todos los componentes, pero no elimina los componentes creados a mano, es decir, aquellos que generamos con TTipoObjeto.Create()
Nuestro problema surgió al ver como la memoria RAM aumentaba y nunca disminuía (lo hacia al menos un poco, pero no lo suficiente). Creacia de 13 Mb ocupados en memoria hasta 200 Mb en el transcurso del uso del sistema hasta trabar la computadora.
Par solucionar el problema debíamos buscar una solucion la cual no nos quitara tiempo al cambiar todo el código y el modo de crear los objetos. Así que juntos encontramos la siguiente solución, que a muchos les será de utilidad.
Eliminación de memoria virtual en Delphi que no se encuentra en uso.
Para hacer lo siguiente basta con ejecutar el siguiente procedimiento:
procedure FreeRAMDelphi;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;
Y la mandamos llamar de la siguiente manera:
try
Forma:=TForm.Create(nil);
Forma.Show;
finally
FreeRAMDelphi;
end;
Fuente: lawebdejm.com
Extracto de bibliografia utilizada:
Región 1Seguímos en línea.
Familia 95: de $00000000 a $003FFFFF
Familia NT: de $00000000 a $00000FFF
Región privada para permitir la compatibilidad con aplicaciones de MS-DOS. En MS-DOS no era posible escribir dentro de los primeros 4Kb de memoria, así que cuando diseñaron Windows tuvieron que continuar con la misma limitación. Un intento de lectura/escritura sobre las primeros 4 Kb (desde $0000 a $FFFF) provocará una violación de acceso. Esa región también es privada para detectar la utilización de punteros nulos, ya que intentarían escribir en la dirección 0.
Región 2
Familia 95: de $00400000 a $7FFFFFFF
Familia NT: de $00001000 a $7FFEFFFF
En esta región es donde se almacenan los datos privados de cada proceso. Como podemos ver, la cantidad de memoria que puede llegar a utilizar una aplicación no son 4 GB como dijimos en principio, sino que son aproximadamente 2 GB.
En la familia NT se almacenan tanto el código y datos de los ejecutables como las DLL del sistema y de usuario. Cualquier variable que utilicemos desde nuestros programas estará en este rango.
Región 3
Familia 95: de $80000000 a $FFFFFFFF
Familia NT: de $8000000 a $FFFFFFFF
Región privada donde se carga el kernel del sistema operativo y los controladores de dispositivos (archivos .VXD).
En Windows 95 además, esta región alberga las DLLs y los archivos proyectados en memoria. Otra diferencia entre Win95 y NT es que para el primero, la región es accesible por el proceso, y el segundo provocará una violación de acceso si se intenta leer/escribir en este rango de direcciones.
lunes, mayo 07, 2007
Conocer el Path de nuestro programa en Delphi RunTime
ExtractFilePath(Application.ExeName);
Fácil.
Seguímos en Línea.
jueves, mayo 03, 2007
Practica Tecnosis - Sistema de Base de Datos
Si no saben que son los Stored Procedures (Procedimientos Almacenados) no se preocupen, poco a poco les iré explicando, pero antes que todo inicie necesitamos instalar las herramientas a usar.
- Primero Instalen Delphi, yo uso el 2005.
- Ahora instalen MySQL 5.0 o superior, para que todo salga bien y no pierdan mucho tiempo (La salida fácil), instalen la última versión de AppServNetwork el cual tambien incluye PHP y Apache, el solito levanta el servidor, ya que lo instalen se dirigen a su navegador y escriben http://localhost ó http://127.0.0.1 y les mostrará la página de su servidor web local (el de su computadora).
- Ahora instalense MySQL Maestro v7.2.0.3 15.4M Completo 3.86M el cual nos permite Administrar fácilmente bases de datos MySQL desde esta interfaz, para manejar los storeds, vistas, triggers, etc etc. [Capturas de pantalla]
- Ahora solo queda instalarse los componentes de DevExpress y listo.
Nota: Con estas herramientas pretendo dar más ejemplos, así que se las recomiendo mucho.Seguímos en Linea.
DevExpress para Delphi y soporte .NET
Encontre todos los componentes en un blog llamado GSLab de Wordpress, no se cuanto tiempo sigan en linea los links, así que será mejor que lo visiten ya.
Seguímos en Línea.
miércoles, mayo 02, 2007
NetSupport
Paginación en SQL con LIMIT
La cláusula LIMIT es usada para limitar el número de registros devueltos en una sentencia SQL. Así que si tienes 1000 filas en una tabla pero sólo te interesa obtener los 10 primeros, puedes ejecutar una sentencia como esta:
SELECT columna FROM tabla LIMIT 10Esto es similar a la clásula TOP de Microsoft SQL Server, sin embargo, en MySQL el LIMIT siempre va al final de la sentencia SQL.
Ahora, suponiendo que te interesa mostrar los registros 11-20, con el uso de la palabra clave OFFSET esto es realmente muy fácil. La consulta quedaría entonces así:
SELECT columna FROM tutabla LIMIT 10 OFFSET 10Esta característica hace que sea muy fácil programar la paginación de resultados haciendo que los valores para el LIMIT y el OFFSET sean variables.
Bueno, es todo, espero que sea de utilidad el tip.
lunes, abril 30, 2007
Linksys WVC54GC Hacer Streaming Video
Ahora me he topado con un problema, es el siguiente:
Después de trabajar con las cámaras que da Telmex para vigilancia Linksys WVC54GC, al incluirlas en un sitio web, existe el problema de que para poder verlas, solamente se puede realizar con Internet Explorer, ya que se necesita la instalación de un ActiveX de Linksys para poder observar el video... y otro problema es que la interfaz obligada a usar es la de la misma cámara de video...
Todo esto limita a usar un solo navegador de internet y decirle adiós a mi querido Mozilla Firefox, ya que Firefox no permite la instalación de ActiveX por la inseguridad que estos (en algunos sitios) puede traer.
Así que me vi a la tarea de resolverlo de la siguiente manera:
Primero que nada el video en Streaming es capturado desde la cámara en la dirección http://IP_DE_LA_CAMARA/img/video.asf, y para poder ver el video ASF lo podemos hacer desde el mismo Windows Media Player... AQUI ESTA LA SOLUCIÓN, solo incluimos en nuestro código HTML un objeto de Windows Media Player que lea esa dirección y LISTO!.
Cabe mencionar que aún no logro hacer el video igual de fluido que con Internet explorer y su ActiveX, pero de que se ve, se ve...
El codigo es el siguiente:
<OBJECT ID="MMPlayer1" WIDTH=350 HEIGHT=300
classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"
CODEBASE="http://activex.microsoft.com/activex/controls/
mplayer/en/nsmp2inf.cab#Version=5,
1,52,701" standby="Loading Microsoft Windows Media Player components..."
type="application/x-oleobject">
<PARAM NAME="FileName" VALUE="http://IP_DE_LA_CAMARA/img/video.asf">
<PARAM NAME="ShowControls" VALUE="1">
<PARAM NAME="ShowStatusBar" VALUE="1">
<PARAM NAME="DefaultFrame" VALUE="1">
<PARAM NAME="Autostart" VALUE="1">
<param name="Rate" value="1000">
</OBJECT>
Solo es cuestion de ponerlo en el BODY del Codigo y listo.
Seguímos en Línea.
sábado, abril 28, 2007
Creación de un Disco Desatendido de Windows XP
Lo que les explicaré es es modo más básico de hacerlo... aún que tambien hay herramientas que lo hacen por ti y son más amplias, pero no deja de ser un buen truco.
Primero introduce el Cd de Windows Xp y ejecuta el Archivo setupmgr.exe que se encuentran en el archivo deploy.cab en el directorio \support\tools , clic en siguiente y elegimos la opción "Crear archivo de respuesta" luego "Crear Instalación Desatendida" Después nos preguntará que tipo de Windows XP Usamos (si Windows XP Proffesional, Home Edition) volvemos a pulsar siguiente y seleccionamos "Totalmente Automatizado" al final decimos que es un archivo de respuesta para la instalación y aceptamos esta licencia. Solo resta completar los campos con clave y nombre de equip. y le decimos que lo guarde en A: (o en la unidad de disquete si no es A:) se crean dos archivos (unattend.txt y unattend.bat) ejecuta el unattend.bat para iniciar la instalación.
Hay varias cosas que se pueden hacer para mejorar nuestra instalación:
En la zona de [DATA] del archivo de respuestas podemos modificar o agregar esto:
Autopartition=1 nos preguntará por el espacio de las particiones. Si lo ponemos en 0 utilizara todo el espacio disponible en el disco para una partición.
• En la zona de [Unattended]:
Repartition="NO" nos preguntara por el tipo de sistema de archivos ( TFS, FAT ). Si lo usamos en modo automático (YES) no podemos elegir el sistema de archivos FAT, sólo el NTFS.
WaitForReboot="NO" eliminara las pantalla que esperan 15 segundos para hacer el reinicio, y ya quedo...
Seguimos en Linea, Jesus Feran
jueves, abril 26, 2007
Seguridad en PHP
Primero que nada el acceso restringido a páginas usando las variables globales $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE solo funciona si PHP ha sido instalado como un módulo de Apache, si ha sido instalado como un CGI los ejemplos de ésta sección no funcionarán.
Para evitarno este show pueden instalarse el Apache+PHP+MySQL juntos y sin problemas con el appservnetwork
Para conseguir la autentificación en las páginas usaremos el sistema de autentificación del protocolo HTTP, este sistema se basa en las variables globales $PHP_AUTH_USER y $PHP_AUTH_PW.
- $PHP_AUTH_USER. Nombre de usuario introducido.
- $PHP_AUTH_PW. Contraseña introducida.
**** Este fragmento de código lo incluirémos en cada una de nuestra páginas, pudiendo así llamar a la ventana de autentificación cada que entremos y si no se escribe usuario: tecnosis y password HuevoS simplemente nos enviará el código en verde, provocando con esto un exit haciendo que no se muestre todo lo que sigue ****
<?php
if (($PHP_AUTH_USER!="Joe") || ($PHP_AUTH_PW!="123")) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B>.
</body>
</html>
Este es un ejemplo básico para la restricción de un página, espero les sirva algún día.
Seguimos en Línea. Jesus Feran
Inicio
El obetivo de dicho blog es ir publicando cada uno algún tip, codigo, diseño o cualquier cosa que sepamos que a los demás nos puede servir.
Este será un GRAN blog, SIENTANSE libres de opinar y publicar... =)
Así que comencemos.