miércoles, 21 de mayo de 2008

Protege el codigo de tus paginas web

Saludos comunidad, le cuento q' para proteger tu código de los copiones del Internet ahora es
muy fácil, sólo sigue los siguientes pasos:
  1. Desconecta tu ordenador de internet.
  2. Crea tu hoja de estilos.
  3. Guárdala.
  4. Apaga el ordenador.
  5. Desmonta la caja del ordenador y saca el disco duro (si el archivo esta en un disco duro extraible puedes saltarte este paso).
  6. Hazte con unos pasajes para un viaje por el atlántico.
  7. Compra una caja fuerte, no es necesario que sea muy grande.
  8. Mete el disco duro en la caja fuerte, mete tambien la llave y la combinación la pones aleatoria (no la apuntes en ningun lado ni la memorices).
  9. Vete al viaje que has pagado (llevate la caja fuerte).
  10. Cuando estes en medio del mar tira la caja fuerte (asegúrate de que nadie te vea).
  11. Pégate un fiestazo en la disco del barco hasta que te caigas borracho.
  12. ¡Ya está! nadie podrá descargarse ahora esa maravillosa hoja de estilos ni copiar tus nuevas reglas e ideas.


Imaginen si los libros no se pudieran prestar ni copiar, pues no habría ningún tipo de conocimiento útil para nadie, pues con las webs es lo mismo, si no quieres compartir tu conocimiento no publiques nada.
Es bueno compartir, ya que asi aprendemos todos, aunque la internet no es nuestra hay maneras de hacer reconocer nuestro trabajo.
Piensalo muy bien ..... Seguimos navegando

lunes, 12 de mayo de 2008

Tu Host Gratis en las Web...

Hola Buen Dia, platicando el otro dia con el kraxbox me paso un link para crear un host gratis con el subdomino site88.net. Este es el mio http://omix.site88.net

Esta es la pagina principal http://www.000webhost.com en donde solo ingresas uno cuantos campos y seleccionas tu subdominio o dominio, para hospedar tus paginas web.

Los servicios q' se ofrecen son 350 Mb de espacio en disco para todos tus archivos, soporte para php 5.2, mysql 5.0.4, el servidor claro q' es Apache 2.2.8, puedes accesar por medio de ftp y desde luego es un servidor sobre Linux solo q' la condicion es q' pongas un link a la pagina de 000webhost.

Cuenta con un Control Panel desde donde puedes realizar todas las operaciones necesarias en tu host. Por ejemplo tiene phpMyAdmin para manipular a Mysql, en lo personal me gusta hacer SQL a mano jejeje :-)

Bueno por lo menos para realizar pruebas es una buena eleccion este servicio gratuito.

Saludos Be Free !!!

martes, 29 de abril de 2008

INTRO A REGEX EN PHP

Hola q' tal ?? bueno esta ocasion comentare un poco sobre Expresiones Regulares con php o REGEX para abreviar, ya que es un tema muy profundo q' debemos tocar siempre q' se trate de validar datos en una pagina web.

¿Que son las Expresiones Regulares?

Son una serie de carácteres que forman un patrón, normalmente representativo de otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otro conjunto de carácteres para ver las coincidencias.

Las expresiones regulares estan disponibles en casi cualquier lenguaje de programación, pero aunque su sintaxis es relativamente uniforme, cada lenguaje usa su propio dialecto.

Si es la primera vez que te acercas al concepto de expresiones regulares te animará saber que seguro que ya las has usado, aún sin saberlo.

Por ejemplo, cuando en una ventana del BASH ejecutamos ls *.sh para obtener un listado de todos los archivos de un directorio, estamos utilizando el concepto de expresiones regulares, donde el patrón * coincide con cualquier cadena de caracteres.

Unos ejemplos mas simples

// este es nuestro patrón. Si lo comparamos con:
am // coincide
panorama // coincide
ambicion // coincide
campamento // coincide
mano // no coincide
?>

Se trata sencillamente de ir comparando un patrón (pattern) que en este ejemplo es la secuencia de letras 'am'- con una cadena (string) y ver si dentro de ella existe la misma secuencia. Si existe, decimos que hemos encontrado una coincidencia (match, en inglés).

Otro ejemplo:

patrón: el
el ala aleve del leve abanico


Caracteres y Meta Caracteres

Nuestro patrón puede estar formado por un conjunto de carácteres (un grupo de letras, numeros o signos) o por meta caracteres que representan otros carácteres, o permiten una búsqueda contextual.

Los meta-caracteres reciben este nombre porque no se representan a ellos mismos, sino que son interpretados de una manera especial.

He aqui la lista de meta caracteres mas usados:

. * ? + [ ] ( ) { } ^ $ | \


Meta Caracteres de Posicionamiento o Anclas

Los signos ^ y $ sirven para indicar donde debe estar situado nuestro patrón dentro de la cadena para considerar que existe una coincidencia.

Cuando usamos el signo ^ queremos decir que el patrón debe aparecer al principio de la cadena de carácteres comparada.

Cuando usamos el signo $ estamos indicando que el patrón debe aparecer al final del conjunto de carácteres.

O mas exactamente, antes de un caracter de nueva linea

Asi:

^am // nuestro patrón
am // coincide
cama // no coincide
ambidiestro // coincide
Pam // no coincide
Pamela // no coincide

am$
// nuestro patrón
am // coincide
salam // coincide
ambar // no coincide
Pam // coincide


^am$
am // coincide
salam // no coincide
ambar // no coincide

?>

o como en el ejemplo anterior:

patrón: ^el
el ala aleve del leve abanico

Escapando Caracteres

Puede suceder que necesitemos incluir en nuestro patrón algun metacaracter como signo literal, es decir, por si mismo y no por lo que representa. Para indicar esta finalidad usaremos un carácter de escape, la barra invertida \.
Así, un patrón definido como 12\$ no coincide con una cadena terminada en 12, y sí con 12$:

patrón: 100$
el ala aleve del leve abanico cuesta 100$
patrón: 100\$
el ala aleve del leve abanico cuesta 100$

Fijate en los ejemplos anteriores. En el primero, no hay coincidencia, porque se interpreta "busca una secuencia consistente en el número 100 al final de la cadena", y la cadena no termina en 100, sino en 100$.
Para especificar que buscamos la cadena 100$, debemos escapar el signo $

Como regla general, la barra invertida \ convierte en normales caracteres especiales, y hace especiales caracteres normales.

Las funciones básicas de expresiones regulares para comparar una cadena con un patrón son ereg($patron, $cadena) y eregi($patron, $cadena).

La diferencia entre ellas es que ereg() distingue entre mayúsculas y minúsculas y eregi() no.

Estas funciones comprueban si la cadena cumple el patrón y devuelven el valor 1 (verdadero) o 0 (falso). Los argumentos de las funciones pueden ser cadenas o variables que contengan cadenas. Si el patrón es la cadena vacía, las funciones devuelven error.

Ejemplo:

<?php
$cadena1 = "1234567";
$cadena2 = "abcdefg";
$patron = "^[[:digit:]]+$";

if (eregi($patron, $cadena1)) {
echo "<p>La cadena $cadena1 son sólo
números.</p>";
} else {
echo "<p>La cadena $cadena1 no son sólo
números.</p>";
}

if (eregi($patron, $cadena2)) {
echo "<p>La cadena $cadena2 son sólo
números.</p>";
} else {
echo "<p>La cadena $cadena2 no son sólo
números.</p>";
}
?>

Sintaxis de las Expresiones Regulares

Patrón Significado
. cualquier carácter
^c empezar por el carácter c
c$ terminar por el carácter c
c+ 1 o más caracteres c
c* 0 o más caracteres c
c? 0 o 1 caracteres c
\n nueva línea
\t tabulador
\ escape, para escribir delante de caracteres especiales: ^ . [ ] % ( ) | * ? { } \
(cd) caracteres c y d agrupados
c|d carácter c o d
c{n} n veces el carácter c
c{n,} n o más caracteres c
c{n,m} desde n hasta m caracteres c
[a-z] cualquier letra minúscula
[A-Z] cualquier letra mayúscula
[0-9] cualquier dígito
[cde] cualquiera de los caracteres c, d o e
[c-f] cualquier letra entre c y f (es decir, c, d, e o f)
[^c] que no esté el carácter c
[[:alnum:]] cualquier letra o dígito (pero no vocales acentuadas, ñ, ç, etc.)
[[:alpha:]] cualquier letra (pero no vocales acentuadas, ñ, ç, etc.)
[[:digit:]] cualquier dígito
[[:lower:]] cualquier letra minúscula (pero no vocales acentuadas, ñ, ç, etc.)
[[:punct:]] cualquier marca de puntuación
[[:space:]] cualquier espacio en blanco
[[:upper:]] cualquier letra mayúscula (pero no vocales acentuadas, ñ, ç, etc.)

Ejemplos de Expresiones Regulares

Patrón Cadena ¿Cumple? Comentario
abc awbwc No Los caracteres tienen que estar seguidos.
34abc No importa que hayan caracteres antes...
cbabcba ... o después.
a2b g1da2b3 Las expresiones regulares detectan letras, números, ...
áb 3áb4 ... incluso acentos, ...
a\$b 1a$b2 ... salvo los caracteres ^ . [ $ ( ) | * + ? { \ €
que deben llevar una contrabarra \ antes,
además de \n (nueva línea) y \t (tabulador)
[aeiou] bic Los corchetes definen los caracteres admitidos en una posición ...
bcd No
[^aeiou] bic ... o no admitidos
aei No
[p-t] avr Se pueden definir rangos de caracteres...
av1 No
[B-D] PMD ... en minúsculas o mayúsculas ...
AV1 No
[0-9] b9d ... o números
bcd No
[[:alpha:]]

Cualquier carácter alfabético (sin acentos)
[[:digit:]]

Cualquier número
[[:alnum:]]

Cualquier número o carácter alfabéticos (sin acentos)
[[:punct:]]

Cualquier carácter que no sean letras y números (menos el euro)
[[:space:]]

Cualquier tipo de espacio en blanco
[[:upper:]]

Cualquier mayúscula (sin acentos)
[[:lower:]]

Cualquier minúscula (sin acentos)
^ab cab No Los caracteres tienen que estar al principio
abc No importa que hayan caracteres después
ab$ abc No Los caracteres tienen que estar al final
cab No importa que hayan caracteres antes
^ab$ ab Tiene que empezar y acabar por aba ...
abab No ... y no puede haber nada antes o después
ab?c abcde El carácter b puede estar entre a y c...
acde ... o no estar entre a y c ...
adcde No ... pero no puede haber otro carácter
a.c abc El . representa cualquier carácter ...
a c ... incluso el espacio el blanco, ...
abdc No pero sólo un carácter
ab+c abcde El carácter b puede estar una vez...
abbbcde ... o varias ...
acde No ... pero tiene que estar al menos una vez.
ab*c abcde El carácter b puede estar una vez...
abbbcde ... o varias ...
acde ... o ninguna.
ab{3}c abbbc Las llaves indican el número exacto de repeticiones del carácter, ...
abbbbc No ... no puede haber más ...
abbc No ... ni menos.
ab{2,4}c abc No Se pueden definir rangos con límite inferior e inferior
abbc
abbbc
abbbbc
abbbbbc No
ab{2,}c abc No Se pueden definir rangos sin límite superior
a(bc){2}d abcbcd Los paréntesis definen agrupaciones de caracteres.
En este caso bc tiene que aparecer repetido
a(bc)?d abcd Aquí bc puede estar ...
ad ... o no estar, ...
abd No ... pero no puede aparecer sólo la b, o sólo la c u otro carácter
a(b|d)c abc Entre la a y la c puede estar el carácter b...
adc ... o el carácter d, ...
abdc No ... pero no los dos, ...
ac No ... ni ninguno de ellos.
^(ab)|(dc)$ abc Está la pareja ab ...
adc ... o dc ...
abdc ... o las dos, ...
ac No ... pero no ninguna
^(ab)$|^(dc)$ abc No Está la pareja ab, pero sobra la c ...
adc No ... o está la pareja dc, pero sobra la a.
dc Está una de las dos


miércoles, 16 de abril de 2008

y tu que super Heroe eres ??

De acuerdo a este test que encontre en planteta glp este fue mi resultado, cual es el tuyo... jajaja ...

Tus resultados:
Tu Eres Superman (Superhombre)
























Superman (Superhombre)
80%
El Flash
80%
Iron Man (El Hombre de Hierro)
75%
Green Lantern (Linterna Verde)
70%
Hulk
65%
Catwoman (Gatúbela)
55%
Robin
53%
Batman
50%
Wonder Woman (Mujer Maravilla)
45%
Spider-Man (El Hombre Araña)
40%
Supergirl (Superchica)
40%
Tienes un caractetivo buena,
fuerte, y te gusta ayudar a otros.


Chascar aquí para tomar "¿Qué el super héroe es yo?" incuesta

Nuevos Plugions para Compiz Fusion ..

Leo a traves de FusionCast los nuevos plugins que se pueden instalar a este maravilloso proyecto, donde tu escritorio se transforma en una serie de figuras que nunca te habrias imaginado.

La verdad mis respetos a los desarrolladores de Compiz-Fusion, es algo q' vale la pena tratar de instalar en tu PC.

En este caso debes compilar compiz-fusion desde las fuentes para obtener estos plugins ..

Aqui el video




Saludos !!!

jueves, 3 de abril de 2008

EasyEclipse

Saludos comunidad, esta ocasion les comento q' encontre EasyEclipse, se trata de una distribución de Eclipse, el cual es un entorno de desarrollo integrado (IDE), que viene empaquetado conjuntamente con todo lo que necesitas para empezar a escribir código fuente en el lenguale que mas utilizas.

Tiene distintos plugins útiles para programar en un determinado lenguaje Java, LAMP, PHP, Python o Ruby on Rails. En la misma web también están disponibles otros plugins que puedes instalar de forma sencilla.

Ademas EasyEclipse es Open Source

Aqui puedes descargar EasyEclipse


Aqui EasyEclipse en un proyecto PHP


Splash de EasyEclipse

viernes, 15 de febrero de 2008

FrostWire

Hey !!! para las personas que les encanta bajar musica, videos, pdf's, etc y utilizan programas como Ares, Emule, Shareaza ... encontre a FrostWire el cual es un cliente p2p de código abierto. Utiliza la red de Gnutella y se basa en el muy conocido cliente LimeWire. Está escrito en Java. También es compatible con la popular red de Bittorrent. Una de las peculiaridades de este cliente es su rapidez y su disponibilidad en casi todas los sistemas operativos con versiones en Windows, Mac OS y GNU/Linux.

Me gusto porque a diferencia de LimeWire, este es 100% libre, y la verdad para utilizar Ares corriendo en Linux emulandolo con Wine, no me agrada mucho la idea. No quiero que despues mi escritorio Linux este lleno de aplicaciones Windows jejeje ;).

Los requerimientos para instalarlo solo es el Java Runtime Enviroment (aqui lo puedes descargar ->>JRE)

Descarga FrostWire de su pagina oficial aqui

Aqui les dejo un screen de FrostWire corriendo sobre SlackWare

lunes, 11 de febrero de 2008

Regresando a la Blogsfera

Hola ;) .. pues despues de un largo tiempo de estar ausente por este mi Blog, les cuento que estoy realizando mi Residencia Profesional en una empresa de Desarrollo de Software InovaWeb IT localizada en la Cd. de Puebla, una de las tareas que me asignaron es el manejo de Capas (layers) con CSS y Javascript :S, tambien aprendo mas cosas de Php y Smarty por su puesto todo esto sobre GNU/Linux Be free!!!.

Tambien sigo impartiendo clases de programacion en ICO Plantel Tepeaca (hay q' chambiarle... ) por cierto ya voy a cumplir 1 año en ese trabajo :).

De igual forma aparte de todo esto me cayo una chamba para desarrollar un sistema para Control de Personal, Pagos, Credenciales,etc.. para estas fechas el sistema ya casi esta listo para ser liberado...

Como se daran cuenta ahora si ya no ando echando la hueva como antes .. jajaja Ahora si lo que me falta es tiempo jejeje....

Bueno pues voy a publicar lo mas pronto posible la informacion acerca de los proyectos mencionados ..

Saludos y nos seguimos leyendo ...

viernes, 5 de octubre de 2007

Creando un blog con CakePhp

Saludos lectores, esta ocasion escribire acerca de como crear un blog con CakePhp, este ejemplo lo tome del sitio oficial de cakephp este ejemplo constara de las siguientes operaciones:
  • Consulta de Articulos
  • Agregar nuevos Articulos
  • Modificar Articulo
  • Eliminar Articulo
Tratare de ser lo mas explicito posible

En primer lugar debemos crear nuestra tabla posts en Mysql:

CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);


INSERT INTO posts (title,body,created)
VALUES ('Primer Post', 'Este es el cuerpo del primer post.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('Segundo Post', 'Este es el cuerpo del segundo post.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('Tercer Post', 'Este es el cuerpo del tercer post.', NOW());

Ahora configuremos nuestra base de datos en cake, debemos abrir el archivo database.php que se encuentra en /app/config/database.php

var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'Tu_login',
'password' => 'Tu_password',
'database' => 'cake' );

Ahora crearemos nuestro Modelo Post

< ? php class Post extends AppModel { var $name = 'Post'; var $validate = array( 'title' => VALID_NOT_EMPTY,
'body' => VALID_NOT_EMPTY
);
}
? >

Aqui ponemos al array validate para asegurarnos q' a la hora q' se este ingresando un articulo los campos title y body no queden vacios.
Mediante la creación de un modelo es que se puede interactuar con la base de datos, con él se tiene las fundaciones para hacer las operaciones de ver, agregar, editar y eliminar.
Los modelos en CakePhp los debemos colocar en /app/models, en este caso el archivo que estamos creando es /app/models/post.php

Ahora pasamos a crear el Controlador

Post->findCount();
$conditions = array("id"=>"> 0");
$fields = array("id", "title", "body", "created");
$order = "Post.id DESC";
$limit = 10;
$this->set('pagination', $total_rows);
$this->pageTitle='Pagina Inicial';
$this->set('posts', $this->Post->findAll($conditions, $fields, $order, $limit));
}
function view($id)
{
$this->pageTitle='Articulos';
$this->Post->id = $id;
$this->set('post', $this->Post->read());
}
function add()
{
$this->pageTitle='Agregar Post';
if (!empty($this->data))
{
if ($this->Post->save($this->data))
{
$this->flash('Your post has been saved.','/posts');
}
}
}
function delete($id)
{
$this->pageTitle='Borrar Articulo';
$this->Post->del($id);
$this->flash('The post with id: '.$id.' has been deleted.', '/posts');
}
function edit($id = null)
{
if (empty($this->data))
{
$this->Post->id = $id;
$this->data = $this->Post->read();
}
else
{
if ($this->Post->save($this->data['Post']))
{
$this->flash('Your post has been updated.','/posts');
}
}
}
}
? >

El controlador es en donde se ejecutará toda la lógica de interacción con los posts. Debemos colocar este nuevo controlador en un archivo llamada posts_controller.php dentro del directorio /app/controllers

Dentro de nuestro controlador colocaremos todos los metodos necesarios para realizar nuestras operaciones en este caso el metodo index lo observaremos cunado el cliente coloque esta URL www.example.com/posts/index esto quiere decir que hay un controlador "posts", el cual posee un método (o función) "index".

Ahora que ya hemos conectado nuestra base de datos con el modelo y que la lógica ha sido definida en el controlador, vamos a crear una vista para el metodo index.
Las vistas de Cake deben ser colocadas en el directorio /app/views cada una dentro de un directorio llamado de acuerdo al controlador al que pertenecen (en este caso tendremos que crear un directorio llamado "posts" asi /app/views/posts/index.thtml


<h1> Blog posts </h1>


<div id="cuerpo">


< ? php foreach ($posts as $post): echo $post['Post']['id']; ? >
<div class="titulo">
<h1>
< ? php echo 'Titulo:'; echo $post['Post']['title']; echo '<a href="/posts/add"> Agregar Articulo </a>'; ? >

< ? php echo $html->link('Borrar',"/posts/delete/{$post['Post']['id']}",null,'Seguro?')?>
< ? php echo $html->link('Editar', '/posts/edit/'.$post['Post']['id']);?>
</h1>

<h3>
< ? php echo 'Creacion: '; echo $post['Post']['created']; ?>
</h3 >
</div>

<div class="arti">
<h4>

</h4>
</div>


</div>

Esta es la vista para agregar un Articulo:
/app/views/posts/add.thtml


<h1> Agregar Articulo </h1>
<form method="post" action="url('/posts/add')?>">
<p>
Titulo:
input('Post/title', array('size' => '40'))?>
tagErrorMsg('Post/title', 'Title is required.') ?>
</p>
<p>
Cuerpo del Articulo:
textarea('Post/body', array('rows'=>'10')) ?>
tagErrorMsg('Post/body', 'Body is required.') ?>
</p>
<p>
submit('Guardar post') ?>
</p>
</form>


Esta la vista para editar un Articulo:
/app/views/posts/edit.thtml


<h1> Editar Articulo </h1>
< form method="post" action="url('/posts/edit')?>" >
hidden('Post/id'); ?>
<p>
Title:
input('Post/title', array('size' => '40'))?>
tagErrorMsg('Post/title', 'Title is required.') ?>
</p>
< p >
Body:
textarea('Post/body', array('rows'=>'10')) ?>
tagErrorMsg('Post/body', 'Body is required.') ?>
</p>
<p>
submit('Actualizar') ?>
</p>
< /form>

Aqui les dejo el archivo .css que utilice para este ejemplo, este lo debemos colocar dentro del directorio /app/webroot/css/ y nombrarlo "cake.generic.css"


*{
margin:0;
padding:0;
}
body{
font-family:"frutiger linotype","lucida grande",helvetica,arial,sans-serif;
text-align:center;
color:#333;
font-size: 76%;
}
/* General Style Info */
a{
color:#003d4c;
text-decoration:underline;
}
a:hover{
color:#003d4c;
text-decoration:none;
}
a img{
border:none;
}
h1, h2, h3, h4{
font-weight:normal;
}
h1{
color: #003d4c;
margin:2px ;
font-size: 140%;
}
h2{
color:#c6c65b;
padding-top: 1em;
margin:0.3em 0;
font-size: 180%;
}
h3{
color:#003d4c;
padding-top:2px;
font-size: 120%;
}
h4{
color:#660000;
padding-top:0.5em;
font-size:120%;
}

ul, li {
margin: 0 12px 0 0;
padding-top: 2px;
}
#cuerpo{
color: black;
padding :10px 10px 10px 10px ;
border: 1px dotted #000000;
font-size: 80%;
}
.titulo{
color: black;
padding :10px 10px 10px 10px ;
border-top: 2px dotted orange;
font-size: 100%;
}
.arti{
color: #002e4d;
padding :20px 10px 50px 10px ;
font-size: 100%;
}
/* Layout */
#container{
text-align:justify;
border: 2px solid #000000;
margin: 10px 10px 10px 10px;
}
#header{
background-color:orange;
margin: 10px 10px 10px 10px ;
padding: 4px 20px;
border: 2px solid #666666;
}
#content{
/*clear:both;*/
padding: 00px 40px 10px 40px;
background-color: #eee;
color: #333;
border: 1px dotted #333333;
margin: 10px 10px 10px 10px;
width:680px;
}
#sidebar{
clear:both;
float:right;
padding: 10px 40px 10px 40px;
background-color: #eee;
color: #333;
border: 1px dotted #333333;
margin: auto 10px auto;
width:100px;
}
#footer{
clear:both;
padding: 6px 10px;
background-color:orange;
text-align: right;
border: 2px solid #999999;
margin: 10px 10px 10px 10px;/* n1=arriba n2=der n3=abajo n4=izq*/
}
/* forms */
form {
margin-top: 2em;
}
form div{
vertical-align: text-top;
margin-left: 1em;
margin-bottom:2em;
}
form div.date{
margin-left: 0em;
}
label {
display: block;
width: 140px;
font-size: 14px;
padding-right: 20px;
}
input[type=checkbox] {
float: left;
clear: left;
margin: 2px 6px 7px 2px;
}
input, textarea {
clear: both;
display:block;
font-size: 14px;
font-family: inherit;
}
select {
clear: both;
vertical-align: text-bottom;
font-size: 14px;
font-family: inherit;
}
option {
font-size: 14px;
font-family: inherit;
padding: 0 0.3em;
}
input[type=submit] {
display: inline;
vertical-align: bottom;
}
div.required {
clear: both;
color:#222;
font-weight:bold;
}

div.submit {
clear: both;
margin-top: 40px;
margin-left: 140px;
}


Debemos colocar un layout para mostrar nuestras vistas en /app/views/layouts/default.thtml



< html >
< head >

< title > Mi sitio :: < ? php echo $title_for_layout; ?> < /title >
< /head >

< body >

< ? php echo $content_for_layout ?>

</body >
< /html >

Ok pues espero sea de su agrado este ejemplo, mas adelante escribire algunos otros donde aremos uso de los helpers de Ajax

jueves, 20 de septiembre de 2007

Python + Gtk = PyGtk

Hola !!! esta ocasion tratare de explicar un poco acerca de como podemos crear una aplicacion de ventana con gtk y python. Para instalar esta libreria debemos acerlo de la siguiente forma:

apt-get install python-gtk2
Ahora debemos escribir el siguiente codigo en nuestro editor de textos favorito,

$nano pygtk1.py


#!/usr/bin/env python

#Importamos a las librerias con las q' trabajaremos
import pygtk
pygtk.require('2.0')
import gtk

#Creamos nuestra ventana Principal
window = gtk.Window()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete-event", gtk.main_quit)
window.set_title("Primeros pasos con GTK")
window.set_default_size(450,250)

#Creamos un objeto layout para colocar nuestros widgets

lay = gtk.Layout(None,None)
lay.set_size(440,240)

#Creamos nuestros botones
b1 = gtk.Button(stock=gtk.STOCK_OK)
b2 = gtk.Button(stock=gtk.STOCK_CLEAR)

nombre = gtk.Label("Escribe tu nombre: ")
datos = gtk.Label("")

entry = gtk.Entry(max=30)
lay.put(nombre,50,50)
lay.put(entry,180,50)
lay.put(b1,170,100)
lay.put(b2,260,100)
lay.put(datos,200,180)

#Definimos nuestras funciones que haran caso a las llamadas de los botones

def on_b1_clicked(b1):
text=entry.get_text()
datos.set_text("Saludos " + text + " Bienvenido a PyGtk ")

def on_b2_clicked(b2):
entry.set_text("")
datos.set_text("")

#Añadimos las señales a la accion clicked de los botones
b1.connect("clicked", on_b1_clicked)
b2.connect("clicked", on_b2_clicked)

#Agregamos nuestro objeto contendor a la ventana

window.add(lay)
window.show_all()
gtk.main()

Ahora ejecutamos nuestro programa asi:

$python pygtk1.py

Aqui puedes encontrar mas informacion tutorial de Pygtk
Mas o menos asi les debe quedar

Bueno espero sea de su agrado este sencillo ejemplo, tratare de ser mas explicito en las siguientes entradas ..

Happy coding !!!

lunes, 17 de septiembre de 2007

Primeros pasos con CakePhp

Hola comunidad, pues despues de un largo rato de estar macheteandole a la documentacion de CakePhp, por fin me anime a escribir un poco acerca de la agotada configuracion que hay que hacerle a este framework :D, aqui les comparto mi experiencia:

Cakephp implementa el patron de diseño Modelo Vista Controlador (MVC) que es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página, el controlador es el Sistema de Gestión de Base de Datos y el modelo es el modelo de datos.
  • Modelo: Esta es la representación específica de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite derivar nuevos datos; por ejemplo, no permitiendo comprar un número de unidades negativo, calculando si hoy es el cumpleaños del usuario o los totales, impuestos o portes en un carrito de la compra.
  • Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario.
  • Controlador: Este responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista
Aqui se observa el funcionamiento del patron MVC

Bueno ahora vamos a la parte practica..

Nos descargamos la version estable de Cakephp (aqui el link) y la guardamos en nuestro ruta de DocumentRoot

En Debian la ruta para almacenar nuestras paginas es /var/www/ (si has cambiado la ruta por default ahi coloca la bola .tar.gz), descomprimimos el archivo y lo renombramos como cake. Dentro de cake debemos tener los siguientes directorios: app/ cake/ docs/ index.php vendors/

Tambien edita el archivo default que esta en sites-available dentro de la carpeta de apache2 y edita la linea DocumentRoot asi:

DocumentRoot /var/www/cake/app/webroot/

Para todo esto debemos tener instalado LAMP en nuestro sistema, ahora creamos una base de datos en Mysql llamada cake. Bien solo nos falta modificar un archivo llamado database.php.default que esta dentro de app/config/ lo abrimos y lo editamos asi:



< ? php class DATABASE_CONFIG { var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'cake',
'prefix' => '');
}
?>


Donde en el elemento database pondremos el nombre de nuestra base de datos, y lo guardamos con el nombre de database.php Ahora solo nos queda checar en el navegador si ya funciona nuestro framework solo colocamos http://localhost y debemos observar algo similar a esto:




Nos vemos en la proxima entrada con un ejemplo mas con Cakephp... Happy Coding !!!

martes, 11 de septiembre de 2007

Las siete maravillas de la Tecnologia

Saludos comunidad ... esta vez escribo para comentarles que atraves de la seccion de tecnologia de el sitio 20 minutos me encuentro con un articulo que habla de la 7 maravillas de la tecnologia aqui les pongo la lista:

El ordenador más próximo al Polo Norte ocupa el primer lugar, una máquina propiedad de un laboratorio de la marina de EE UU que entre abril y octubre ofrece imágenes a través de su webcam , soporta temperaturas extremas y contribuye a la investigación de la zona.

Le sigue el ordenador más alejado de la tierra. Se trata de la computadora a cargo de la sonda Voyager 1 , que en la actualidad está a 4.000 millones de la Tierra, unas tres veces más lejos que Plutón. Es el objeto de fabricación humana que ha viajado a mayor distancia.

El centro de datos más misterioso es según CIO el que posee Google, y ocupa el tercer lugar de este ranking. Para hacerse una idea de sus dimensiones basta decir que el sistema de ventilación tiene el tamaño de un edificio de cuatro pisos, que en él pueden trabajar dos centenares de personas y pueden estar almacenados 200 petabytes de datos.

La cuarta maravilla del mundo tecnológico es un proyecto de computación distribuida , el E-SciencE II , que pone cientos de grandes ordenadores al servicios de investigación química o de geólogos. Actualmente 45 países utilizan esta infraestructura.

IBM y su supercomputador BlueGen/L, el mayor del mundo y líder del Top500 mundial, no podían quedar fuera de esta selección. Ocupa 2.500 metros cuadrados, ayuda a los investigadores a resolver cuestiones muy complicadas y consume la misma energía que un motor de 2000 caballos. Un monstruo de la ingeniería informática.

De lo más grande a lo más pequeño. El sexto puesto es para el modelo 02 del miniordenador OQO, el más pequeño de los que funcionan con Windows Vista. La séptima y última maravilla del mundo tecnológico según CIO es Linux, el sistema operativo libre creado por Linus Torvalds en 1991.

Como ven...

jueves, 6 de septiembre de 2007

Actualizando mi Debian Lenny !!!

Que onda comunidad linuxera les cuento que hace poco decidi cambiar mi distribucion Debian etch (estable) a la version testing, me estaba dando mucha flojera ya que tenia un buen de archivos que respaldar. La instalacion de Lenny no fue complicada al bootear con el cd escribi installgui, y despues de eso puro siguiente.. siguiente.. siguiente.. jajaja

Los repositorios que estoy utilizando son estos:

deb http://mmc.igeofcu.unam.mx/debian/ lenny main contrib non-free deb-src http://mmc.igeofcu.unam.mx/debian/ lenny main contrib non-free deb http://www.debian-multimedia.org testing main

Aqui les dejo una imagen de mi escritorio con Debian Lenny...

miércoles, 5 de septiembre de 2007

20 mandamientos para diseñar un sitio web

Saludos ... quitandole un poco el polvo a mi blog :D les comento esta nota que me encontre aqui sobre los aspectos mas importantes a tomar en cuenta a la hora de crear un sitio web, aqui les pongo una lista:

1. El usuario debe saber de que es el sitio en unos 10 segundos.
2. Haz el contenido “scaneable porque los usuarios no leen los sitios, los scanean (Jakob Nielsen).
3. No uses tipografías difíciles de leer en textos que quieres que se lean.
4. No solicites regitrarse al usuario a no ser que sea necesario.
5. No uses Flash sin una razón de peso (ojo que hay pocas).
6. No toques música en el sitio y si debes reproducir audio, deja que el usuario lo inicie.
7. No usues texto parpadeante.
8. Prefiere el CSS por sobre las Tablas.
9. Asegúrate que tus usuarios puedan buscar en todo el sitio
10. Usa navegación de texto y no con imagenes ni botones flash.
11. Si estás vinculando hacia un PDF o cualquier otro tipo de archivo que no sea html, házlo saber.
12. No uses estructuras de navegación complejas.
13. Evita por todos lo medios una Intro y una página “splash” que te lleve al contenido real.
14. No hagas sitios web compatibles solamente con un navegador específico
15. No subrayes texto a menos que sea un enlace
16. No uses Gifs Animados, ya no estamos en los años 90’s
17. No uses Pop-Ups aunque tu cliente te lo exija
18. No uses el Scroll horizontal, muchá gente ni lo notará
19. No cometas errores de ortografía porque pierdes la credibilidad.
20. Usa textos legibles en los sistemas CAPTCHA de los formularios.

Espero lo tomen en cuenta ...

miércoles, 25 de julio de 2007

Script en php para saber el número de visitas en una página web

Hola comunidad !!!
Esta vez estoy aquí para presentarles un script echo con php para saber cuantas visitas a tenido una página web, este script puede ser visible para todos los usuario o solo para el webmaster, aqui les pongo el código :




Debes de crear un archivo llamado 'count.txt' en el lugar donde pondras el script.
Buenos espero les sirva de algo ... Saludos !!!!!!!!!!!!

jueves, 19 de julio de 2007

Ajax Loading Gif Animator

Hola comunidad... encontré esta herramienta que me pareció muy interesante se llama Ajax Loading Gif Animator, la cual nos permite crear animaciones y botoncitos online para nuestras webs y usarlas libremente.

AjaxLoad permite crear barras de progreso, serpientes que se muerden la cola, flechitas… Todas aquellas pequeñas animaciones que hacen las delicias de las nuevas aplicaciones.

Podemos indicar el tipo de animación, los colores utilizados y listo, podemos bajar un gif animado como el resultado.

Unos ejemplos:







Aquí les dejo el enlace, a crear Gifs ....... http://www.ajaxload.info/

jueves, 21 de junio de 2007

CAKEPHP

CakePhp es un framework para desarrollar aplicaciones con php, utilizando el esquema MVC ( Modelo Vista Controlador) .
Es lo mismo q' Rails para Ruby, solo q' si quieres utilizar RoR tendras q' aprender un nuevo lenguaje, si ya sabes php y la programacion orientada a objetos te es familiar no tendras ningun problema al familiarizarte con CakePhp !!!! basicamente es una utilidad diseñada para facilitar el desarrollo de proyectos en php.

¿Para que sirve?
Facilita la creación de administradores para el manejo de contenido estandar (insertar, editar y eliminar registros), facilita la validación de los campos de los formulario, previene de ataques por SQL injection, facilita el testeo de las aplicaciones, facilita la interacción con la base de datos mediante el uso de ActiveRecord y tambien tiene un sistema de plantillas rápido y flexible.

¿Cómo utilzarlo?

Los requisitos mínimo son Apache con PHP 4.3.2 o superior y MySQL, si el mod_rewrite esta habilitado mejor que mejor.

Lo podemos descargar de su sitio oficial http://www.cakephp.org/downloads

Para la proxima tratare de explicar como instalar cakephp !!!

Happy codding ..

miércoles, 16 de mayo de 2007

HACIENDO PROMOCION DE GNU/LINUX...

Saludos comunidad linuxera, me entero por medio de los cuates en el IRC, q' un usuario de GNU/Linux a empezado a promover el uso de SL en los vagones del metro en el D.F. según cuenta q' acompaña los disco de Ubuntu con una hoja q' hace referencia al uso del SL, y pide una cooperación de 20 morlacos.
Podemos tomar este ejemplo para empezar a difundir el uso de SL en nuestra ciudad... y en sus alrededores muchos viajamos en transporte público y en vez de ir durmiendo =) podemos convencer a mucha gente en usar GNU/Linux.

Fuente http://nimrodphoinix.wordpress.com/gnulinux/

lunes, 30 de abril de 2007

Flisol 2007 en el Tec de TPAK

Hola, les cuento q' Flisol 2007 en el Tec de Tepeaca salio a la perfección, la verdad no esperabamos a tanta gente, en la parte de conferencias contamos con la presencia de ponentes de gran calidad como es el caso de Sonia Sanchez, egresada de la UNAM.
En la parte de talleres instalamos Debian GNU/Linux en uno de los laboratorios de la institución, la idea es q' los alumnos interesados en aprender Linux puedan asistir a practicar en las horas otorgadas a la comunidad linuxera de esta institución. De igual forma los chavos q' llevaron su Pc se llevaron la distro para trabajarla en su casa.
Un cuate de la Universidad Politecnica de Puebla Toño nos hizo el favor de impartir un pequeño taller de programación sobre el bash de Linux, en el cual enseño a los participantes a realizar un pequeño despertador.
También hubo un taller demostrativo de Fedora Core y Suse impartido por el compañero Paulo Endeler, pusimos una pequeña exhibición con Beryl, OpenOffice, Gnome, Kde, Blender y los paquetes q' puedes usar en Linux.





Bueno ps fue una grata experiencia haber participado en este evento, y
espero nos veamos en Flisol 2008..
Saludos ;-)

sábado, 14 de abril de 2007

Ubuntu Feisty Fawn

Hola, les comento q' ya puedes obtener CD's de Ubuntu 7.04, solo hay chance de pedir 3 discos. Es bueno q' Cannonical hayá decidido volver a regalar discos de Ubuntu, porq' es una muy buena forma de difundir el uso de GNU/Linux.
De esta forma Ubuntu se ha colocado en una de las distros mas populares.

Yo ya pedi mis 3 CD's de Ubuntu Feisty ... aqui

Saludos a todos !!!

ShareThis