viernes, 19 de octubre de 2007

pkgsrc: Install free or die!

FreeBSD

Resulta que cuando instalé por primera vez el FreeBSD y aprendí a instalar paquetes, descubrí que tiene tres formas de lograrlo:

Por medio de los binarios empaquetados.

Este procedimiento es como si descargaras el archivo .exe en Windows y lo instalaras en el sistema:

# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230- This machine is in Vienna, VA, USA, hosted by Verio.
230- Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.directorio
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375 00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz

Usando el programa pkg_add.

Es básicamente lo mismo que el método anterior sólo que en lugar de hacer el FTP y el get y todo el procedimiento de descarga, el programa lo hace todo por ti:

# pkg_add -r lsof

Compilando los paquetes.

El programa se encarga de descargar todo lo requerido para el funcionamiento del paquete, desempaqueta los archivos, los compila, los instala y listo. Este el método en el cual quiero puntualizar.

FreeBSD's Ports

Los señores que diseñaron el FreeBSD pusieron todo lo que tu necesitas para compilar los programas en un enorme esqueleto de Makefiles llamado "ports" que se ubica en:

/usr/ports

en el cual, accedes a el:

# cd /usr/ports

buscas el paquete que necesitas:

# make search name=lsof
Port: lsof-4.56.4
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))
Maint: obrien@FreeBSD.org
Index: sysutils
B-deps:
R-deps:

vas a donde está ubicado el Makefile del programa:

# cd /usr/ports/sysutils/lsof

compilas, instalas y eliminas los archivos del proceso:

# make install clean
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===> Extracting for lsof-4.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===> Patching for lsof-4.57
===> Applying FreeBSD patches for lsof-4.57
===> Configuring for lsof-4.57
...
[configure output snipped]
...
===> Building for lsof-4.57
...
[compilation output snipped]
...
#

y después de muchas horas tienes el programa listo para ser utilizado.

NetBSD Binary Packages

El manual menciona el siguiente procedimiento para agregar los binarios (packages o paquetes en la jerga del NetBSD):

Definimos la ruta de acceso, en mi caso estoy usando el NetBSD 3.1 en una máquina compatible con el i386:

Para los C-Shells (TCSH, etc):

[#] setenv PKG_PATH ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD-3.1/i386/All

Para los Bourne shells (Bash, etc):

[#] PKG_PATH="ftp://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD-3.1/i386/All"
[#] export PKG_PATH

Y agregamos los paquetes que necesitas:

[#] pkg_add -v firefox
[#] pkg_add -v gimp
[#] pkg_add -v mc
[#] pkg_add -v gnome

Este procedimiento es similar al segundo de la instalación de paquetes del FreeBSD, pkg_add descarga el paquete con los binarios precompilados, los desempaqueta, instala y establece las opciones por default, además de descargar tambien las dependencias de éstos.

Es muy sencillo y sin complicaciones, sólo agregas la línea donde se define la variable de entorno PKG_PATH al archivo de inicio del shell de la cuenta del superusuario, loggeas como él e instalas lo que necesitas.

El detalle está en que a veces un determinado paquete necesita de otro que no está disponible en forma precompilada y tienes que compilarlo, instalarlo y seguir con la instalación del paquete que originalmente querías.

...todo tiene su razón...

Así reza la canción, vamos a suponer que quieres instalar una aplicación el cual no está disponible a través de tu administrador de paquetes nativo del sistema que usas.

Lo primero que haces es pedirle a San Google que te muestre la dirección donde puedes obtener su código fuente (los Slackers están acostumbrado a esta forma de instalar aplicaciones así que para ellos esto no es ninguna noveda').

Desempaquetas e inicias la configuración del proceso de compilación con el script ./configure pero ¡oh sorpresa!, ésta aplicación necesita de otra que para tu mala fortuna tampoco está disponible a través de tu administrador de paquetes nativo (cuánta razón tuvo el ingrato del Murphy al haber dicho que lo peor sucede en el peor momento), pero bueno, como estás de buenas y se te cuecen las habas por probar esa susodicha aplicación, le vuelves a pedir a San Google que te ilumine el camino de nuevo.

Descargas la dependencia, configuras el entorno de compilación y necesita de *OTRA* aplicación que tampoco tienes. Tu paciencia ya se empieza a agotar y después de una respiración profunda acudes de nuevo a San Google y ahí vas otra vez.

Esta vez la configuración del entorno de compilación del tercer nivel de dependencias no te dijo nada (a veces me pongo a pensar en estas situaciones que los objetos tienen más vida de lo que aparentan y se burlan de uno), entonces inicias la compilación y como no pasó a mayores instalas la dependencia.

Entonces regresas al segundo nivel y continuas con el script ./configure pero de nuevo, otra dependencia. Ya te empiezas a encabronar pero le sigues, buscas esa dependencia, la descargas, empiezas su proceso de configuración y ¡OTRA DEPENDENCIA QUE NO TIENES!

Entonces te pones a pensar "cómo no hubiera una forma de rastrear todas esas dependencias y que automáticamente las descarge, compile e instale", pues ya no sufras, la solución esta a tan solo dos tecleos de distancia.

Origen del pkgsrc

pkgsrc (se pronuncia "package source") fue inspirado en los ports del FreeBSD. Tambien es un conjunto de Makefiles que además de indicar cuáles son las dependencias de determinada aplicación sabe dónde puede conseguirlos (incluye una lista con varias direcciones por si da la casualidad de que el servidor del sitio oficial está apagado o en mantenimiento ese día).

pkgsrc es un universo a parte del sistema en donde está instalado, no le importa saber qué aplicaciones ya tienes instalado y ni existe una manera de hacérselo saber (sería una total estupidez y una enorme pérdida de tiempo y ancho de banda pedirle que te compile el KDE completo si ya lo tienes instalado). Con el simple hecho que funcione su bootstrap tienes la completa seguridad de que tiene todo lo necesario para que haga su magia

Los señores de NetBSD le han puesto tanto empeño a este proyecto al grado en que el alumno superó al maestro (por el aquello de haber sido inspirado en los Ports del FreeBSD) y es ahora un sistema independiente de NetBSD y de cualquier otro sistema en particular.

De la misma forma en que lo podrías usar en Debian, Slackware o en Ubuntu lo puedes usar en Solaris, AIX o en HP-UX (claro que con ciertos detallitos ya que no todos los sistemas son iguales).

Requisitos

Lo mínimo que necesita un sistema para poder usarlo es lo siguiente:

CVS — con el cual obtendrás una copia del árbol del pkgsrc.
GCC — Compilador C, obvio si no cómo diablos piensas compilar el código fuente.
G++ — Para las aplicaciones escritas en el lenguaje C++.
Make — Lo irónico de pkgsrc: necesitas un make para hacer su make... (!?)
Gawk — Para las expresiones.
libncurses-dev — Una librería ncurses para desarrollar aplicaciones.
SSH — Para hacer el tunneling y obtener los paquetes.
WGet — Para poder mejorar las descargas de los tarballs.

Configuración del entorno del CVS

*NOTA*

Todos los comandos con el pkgsrc se tienen que hacer como el superusuario.

Primero creas el archivo ~/.cvsrc y le agregas lo siguiente:

[#] vi ~/.cvsrc

checkout -P
update -dP
release -d
diff -upN
cvs -q -z3
rdiff -u

Ahora configuras el archivo de inicio del intérprete de comandos (el shell para los puristas) que esté usando el superusuario:

Para los Bourne shells:

CVSROOT="anoncvs@anoncvs.netbsd.org:/cvsroot"
CVS_RSH="ssh"

export CVSROOT CVS_RSH

Para los C-Shells:

setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot
setenv CVS_RSH ssh

Descarga del árbol del pkgsrc

Simplemente:

[#] cd /usr

Y luego:

Si quieres la versión estable:

[#] cvs -q checkout -rpkgsrc-2007Q2 -P pkgsrc

Si quieres la versión actual:

[#] cvs -q checkout -P pkgsrc

Preparación del pkgsrc

Configuramos el entorno del pkgsrc a través de su bootstrap:

[#] cd /usr/pkgsrc/bootstrap

[#] ./bootstrap

Este proceso es muy importante. Si en las líneas de la compilación del bootstrap lees algún error corrígelo aunque el proceso haya acabado "satisfactoriamente".

Y agregamos las nuevas rutas:

Para el superusuario:

Para los Bourne Shells:

PATH="$PATH:/usr/pkg/bin:/usr/pkg/sbin"
MANPATH="$MANPATH:/usr/pkg/man"

export PATH MANPATH

Para los C-Shells:

setenv PATH ${PATH}:/usr/pkg/bin:/usr/pkg/sbin
setenv MANPATH ${MANPATH}:/usr/pkg/man

Para los usuarios normales (para que puedan acceder a los programas instalados vía pkgsrc):

Para los Bourne Shells:

PATH="$PATH:/usr/pkg/bin"
MANPATH="$MANPATH:/usr/pkg/man"

export PATH MANPATH

Para los C-Shells:

setenv PATH ${PATH}:/usr/pkg/bin
setenv MANPATH ${MANPATH}:/usr/pkg/man

Configuración del bmake

Agregamos lo siguiente para que se pueda mejorar la descarga de los tarballs:

[#] vi /usr/pkg/etc/mk.conf

.ifdef BSD_PKG_MK
...
PKG_RESUME_TRANSFER = yes
FETCH_CMD = wget
FETCH_BEFORE_ARGS = --passive-ftp
FETCH_RESUME_ARGS = -c
FETCH_OUTPUT_ARGS = -O

# Por si necesitas agregar alguna aplicacion X11
X11_TYPE = xorg

.endif # ends pkgsrc settings

Auditoría de paquetes

Para que puedas checar si no existe por ahí algún "hoyito" por donde se pueda
meter el chiflón en los paquetes (problemas de seguridad):

Instalamos el auditor:

[#] cd /usr/pkgsrc/security/audit-packages

[#] bmake fetch-list | sh

[#] bmake

[#] bmake install

[#] bmake distclean clean-depends

Descargamos el archivo de auditoría:

[#] cd /usr/pkg/sbin

[#] ./download-vulnerability-list

Auditamos los paquetes:

[#] cd /usr/pkg/sbin

[#] ./audit-packages

Administración de paquetes

Instalación de paquetes

Buscamos el paquete:

[#] find /usr/pkgsrc -type d | grep nombre_del_paquete

Lo instalamos:

[#] cd /usr/pkgsrc/seccion_del_paquete/nombre_del_paquete

Descargamos el paquete con sus dependencias ("fetching dependencies" dijeran los gringos):

[#] bmake fetch-list | sh

Observa que el comando incluye el tubito '|' y el 'sh'.

Compilamos (y esperamos):

[#] bmake

Instalamos (nos despertamos):

[#] bmake install

Y limpiamos para liberar espacio:

[#] bmake distclean clean-depends

Desinstalación de paquetes

Usando el bmake:

[#] cd /usr/pkgsrc/seccion_del_paquete/nombre_del_paquete

[#] bmake deinstall

Usando el pkg_delete:

[#] pkg_delete -v nombre_del_paquete

Información sobre los paquetes disponibles

Se puede obtener una lista en HTML que puedes consultar con el firefox, el konqueror, etc., de todos los paquetes que puedes instalar en tu sistema y que están disponibles vía pkgsrc:

[#] cd /usr/pkgsrc

[#] bmake readme

Y te esperas como tres horas para que te genere el índice de todos ellos.

Conociendo los targets del bmake

Para saber de qué otra manera puedes compilar los paquetes puedes obtener una lista de la siguiente manera (por ejemplo para descargar las dependencias "fetch-list":

[#] cd /usr/pkgsrc

[#] bmake help topic=fetch-list

Opciones de compilación

Para ver las opciones posibles de compilación del paquete:

[#] bmake show-list

"Desinstalación" del pkgsrc

La "desintalación" del pkgsrc consiste en lo siguiente:

Eliminar la estructura del pkgsrc:

[#] cd /usr

[#] rm -R pkg*

Eliminar la base de datos de los paquetes:

[#] cd /var/db

[#] rm -R pkg*

Para saber más...

El manual del pkgsrc:

The pkgsrc guide - for users and developers of pkgsrc, the centralized package build and management system . Available formats for download: PostScript and PDF

En el FreeNode

Los canales #netbsd y #pkgsrc (only for english speakers).

Dedicatoria

Este post está dedicado a todos los del canal de #netbsd en FreeNode por haberme soportado todo el tiempo que me llevó comprender la mecánica del pkgsrc, en especial al Malditron por su paciencia y sus consejos.

A los señores que diseñaron el pkgsrc: muchas gracias por habernos dado una alternativa segura, sencilla y confiable.

La ley de Murphy y las mujeres

Por cierto ¿y cómo se aplica la ley de Murphy en las mujeres? Fácil:

"Tu mujer no es la excepción"

Tétrico ¿no?

Saludos

martes, 25 de septiembre de 2007

Three Headed Dæmon and a Guest

Ok, finalmente me pude sacudir de los href="http://www.mononeurona.org/users/entry/asarch/786">40GB que
me estaban estorbando y como me sobraron discos vírgenes
decidí de una vez por todas respaldar todos mis datos.



Siempre había sido mi sueño tener instalados las tres
versiones principales del BSD (sin orden en específico):
FreeBSD, OpenBSD y el NetBSD. Como dicen por ahí, se
podría mediante la virtualización pero siento que no es
lo mismo.



Además de que tambien quería probar el Solaris que tanto
anda regalando Sun, así que sin más nos pusimos a
calcularle.



División del disco duro




Esta parte es la mas fácil, el disco duro tiene 120,000MB
dividido entre 1024 para saber el tamaño exacto en GB:



120,000MB / 1024 = 117.1875GB




A esta cantidad la dividimos entre 4:



117.1875 / 4 = 29.296875




Ok, cada particion tendrá por lo menos ~29GB para practicar y
probar todo lo que queramos.



Lo que sigue es calcular el tamaño de los disklabels:



style="font-family: Courier New,Courier,monospace;">+---+ - +style="font-family: Courier New,Courier,monospace;">
| X
|   |  13GB: Root [/]
style="font-family: Courier New,Courier,monospace;">
+---+  
+


| Y
|   |   2GB: Swap
style="font-family: Courier New,Courier,monospace;">
+---+ - +style="font-family: Courier New,Courier,monospace;">
| Z
|   |  14GB: Home [/usr/home]
style="font-family: Courier New,Courier,monospace;">
+---+ - +




13GB para la partición root y 2GB para la partición Swap
es muchísimo para cualquier BSD, ellos están
diseñados para trabajar con lo mínimo, sin embargo, ese
espacio es el requerido cuando te toca compilar aplicaciones del
tamaño del OpenOffice.org.



Introducción a los "slices"


En la jerga de los BSD, los slices no son otra cosa mas que las
particiones primarias en GNU/Linux:



style="font-family: Courier New,Courier,monospace;">              
+ - +---+ - +style="font-family: Courier New,Courier,monospace;">
              
|   |XXX|   |
style="font-family: Courier New,Courier,monospace;">
              
|   +---+   |
style="font-family: Courier New,Courier,monospace;">
Particiones   
|   |XXX|   |    Slices
style="font-family: Courier New,Courier,monospace;">
(GNU/Linux)   
|   +---+   |    (BSD)
style="font-family: Courier New,Courier,monospace;">
              
|   |XXX|   |
style="font-family: Courier New,Courier,monospace;">
              
|   +---+   |
style="font-family: Courier New,Courier,monospace;">
              
|   |XXX|   |
style="font-family: Courier New,Courier,monospace;">
              
+ - +---+ - +
style="font-family: Courier New,Courier,monospace;">



En GNU/Linux existen dos tipos de particiones: primarias y extendidas.



Un disco duro en la arquitectura x86 solamente se puede dividir en
cuatro particiones primarias.



style="font-family: Courier New,Courier,monospace;">+---+ - +style="font-family: Courier New,Courier,monospace;">
|XXX|  
|


+---+  
|


|XXX|  
|   Particiones
style="font-family: Courier New,Courier,monospace;">
+---+  
|   Primarias
style="font-family: Courier New,Courier,monospace;">
|XXX|  
|


+---+  
|


|XXX|  
|


+---+ - +style="font-family: Courier New,Courier,monospace;">



Y si tenías la necesidad de crear más particiones, por si
de casualidad te daba por probar todas las distros comunes, entonces
tenías que eliminar una partición primaria y en su lugar
crear una partición extendida:



style="font-family: Courier New,Courier,monospace;">+---+style="font-family: Courier New,Courier,monospace;">
|XXX|style="font-family: Courier New,Courier,monospace;">
+---+style="font-family: Courier New,Courier,monospace;">
|XXX|style="font-family: Courier New,Courier,monospace;">
+---+style="font-family: Courier New,Courier,monospace;">
|XXX|style="font-family: Courier New,Courier,monospace;">
+---+ - +style="font-family: Courier New,Courier,monospace;">
|  
|   |  Partición extendida
style="font-family: Courier New,Courier,monospace;">
+---+ - +




Dentro de esa partición extendida debes de crear las particiones
lógicas para cada una de las distros que quieres probar:



style="font-family: Courier New,Courier,monospace;">+-----+style="font-family: Courier New,Courier,monospace;">
|XXXXX|style="font-family: Courier New,Courier,monospace;">
+-----+style="font-family: Courier New,Courier,monospace;">
|XXXXX|style="font-family: Courier New,Courier,monospace;">
+-----+style="font-family: Courier New,Courier,monospace;">
|XXXXX|style="font-family: Courier New,Courier,monospace;">
+-----+ - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Slackware
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Fedora Core
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Debian
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  OpenSuse
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Ubuntu
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Mandriva
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Xandros
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  Gentoo
style="font-family: Courier New,Courier,monospace;">
||===|| - +style="font-family: Courier New,Courier,monospace;">
||  
||   |  CentOS
style="font-family: Courier New,Courier,monospace;">
+-----+ - +




En BSD las particiones primarias se llaman slices y las style="font-style: italic;">"particiones" dentro de los slices
se les llama ¡particiones!



style="font-family: Courier New,Courier,monospace;">+---+ - +
-------------------------- +style="font-family: Courier New,Courier,monospace;">
|  
|   | Particion 0: Root [/]     
|  
style="font-family: Courier New,Courier,monospace;">
|===|  
|
                          
|   BSD slice
style="font-family: Courier New,Courier,monospace;">
|  
|   | Particion 1: Swap [swap]   |  
(Partición primaria
style="font-family: Courier New,Courier,monospace;">
|===|  
|
                          
|   de GNU/Linux).
style="font-family: Courier New,Courier,monospace;">
|  
|   | Particion 2: Home [/home]  |
style="font-family: Courier New,Courier,monospace;">
+---+ - +
-------------------------- +
style="font-family: Courier New,Courier,monospace;">style="font-family: Courier New,Courier,monospace;">
|XXX|  
|


+---+ - +style="font-family: Courier New,Courier,monospace;">
|XXX|  
|


+---+ - +style="font-family: Courier New,Courier,monospace;">
|XXX|  
|


+---+ - +style="font-family: Courier New,Courier,monospace;">style="font-family: Courier New,Courier,monospace;">



Las particiones de BSD se crean con el commando diskslice y
desafortunadamente (o afortunadamente) los BSD solamente se pueden
instalar sobre particiones primarias de GNU/Linux tal como lo hace
Windows.



Para más información consulta los siguientes documentos:


  • Para las particiones de Linux:


href="http://www.tldp.org/HOWTO/Large-Disk-HOWTO.html" target="_top">Large-Disk-HOWTO,
Large Disk HOWTO


href="http://www.tldp.org/HOWTO/Multi-Disk-HOWTO.html" target="_top">Multi-Disk-HOWTO,
HOWTO: Multi Disk System Tuning


href="http://www.tldp.org/HOWTO/Partition/index.html" target="_top">Partition,
Linux Partition HOWTO


href="http://www.tldp.org/HOWTO/Partition-Rescue/index.html"
target="_top">Partition-Rescue,
Partition Rescue mini HOWTO



  • Para los slices de BSD:



href="http://www.netbsd.org/docs/guide/en/">The NetBSD Guide, Part
II System installation and related issues, chapter 2 Installation,
section 2.3 Installation, subsection 2.3.3 href="http://www.netbsd.org/docs/guide/en/chap-inst.html#chap-inst-install-partition">Partitions.




División lógica del disco duro




Para crear los slices usé el fdisk del disco de rescate del href="http://fedoraproject.org/">Fedora Core 7 "Moonshine":



style="font-family: Courier New,Courier,monospace;">[#] fdisk /dev/sdastyle="font-family: Courier New,Courier,monospace;">


The number of
cylinders for this disk is set to 14593.
style="font-family: Courier New,Courier,monospace;">
There is
nothing wrong with that, but this is larger than 1024,
style="font-family: Courier New,Courier,monospace;">
and could in
certain setups cause problems with:
style="font-family: Courier New,Courier,monospace;">
1) software
that runs at boot time (e.g., old versions of LILO)
style="font-family: Courier New,Courier,monospace;">
2) booting
and partitioning software from other OSs
style="font-family: Courier New,Courier,monospace;">
  
(e.g., DOS FDISK, OS/2 FDISK)
style="font-family: Courier New,Courier,monospace;">


Command (m
for help): p
style="font-family: Courier New,Courier,monospace;">


Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, style="font-weight: bold; text-decoration: underline;">14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">



No tenemos aún ningún slice definido, así que
vamos a calcularle de nuevo:



Son 14593 cilindros, divididos entre 4:



14593 / 4 = 3648.25




Arrimamos los 0.25 hacía un sólo slice y
tendríamos la siguiente configuración:



3648

3648

3648

3649




Ahora, le restamos un 1 a cada slice:



3648 - 1 = 3647

3648 - 1 = 3647

3648 - 1 = 3647

3649 - 1 = 3648




Y ese es el tamaño que vamos a ocupar para indicarle al fdisk.



Creando los slices




Vamos a crear el slice para el Solaris, vamos a ocupar el 3648:



style="font-family: Courier New,Courier,monospace;">Disk /dev/sda:
120.0 GB, 120034123776 bytesstyle="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">


Command (m
for help): n
style="font-family: Courier New,Courier,monospace;">
Command actionstyle="font-family: Courier New,Courier,monospace;">
  
e   extended
style="font-family: Courier New,Courier,monospace;">
  
p   primary partition (1-4)
style="font-family: Courier New,Courier,monospace;">
pstyle="font-family: Courier New,Courier,monospace;">
Partition
number (1-4): 1
style="font-family: Courier New,Courier,monospace;">
First
cylinder (1-14593, default 1):
style="font-family: Courier New,Courier,monospace;">
Using default
value 1


Last cylinder
or +size or +sizeM or +sizeK (1-14593, default 14593): style="color: blue; font-weight: bold;">+
3648style="font-family: Courier New,Courier,monospace;">



Checamos si no se traslapa:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): p



Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3649   
29310561   83  Linux
style="font-family: Courier New,Courier,monospace;">



Debes de tener cuidado de agregar el simbolo style="font-weight: bold; color: blue;">+ antes del style="font-style: italic;">3648 ya que si no lo haces:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): n

Command actionstyle="font-family: Courier New,Courier,monospace;">
  
e   extended
style="font-family: Courier New,Courier,monospace;">
  
p   primary partition (1-4)
style="font-family: Courier New,Courier,monospace;">
pstyle="font-family: Courier New,Courier,monospace;">
Partition
number (1-4): 1
style="font-family: Courier New,Courier,monospace;">
First
cylinder (1-14593, default 1):
style="font-family: Courier New,Courier,monospace;">
Using default
value 1


Last cylinder
or +size or +sizeM or +sizeK (1-14593, default 14593): 3648
style="font-family: Courier New,Courier,monospace;">


Command (m
for help): p
style="font-family: Courier New,Courier,monospace;">


Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3648   
29302528+ 
83  Linux
style="font-family: Courier New,Courier,monospace;">



Se crea un tamaño diferente y además de que se traslapa
la partición, el símbolo style="font-weight: bold; color: red;">+ despues del
número debajo de la columna "Blocks"
indica eso y a los señores de BSD y Solaris no tan le gusta esto
(el programa de instalación muestra un mensaje de advertencia).



Ahora vamos a crear el slice para FreeBSD (3647 cilindros):



style="font-family: Courier New,Courier,monospace;">Command (m for
help): n

Command actionstyle="font-family: Courier New,Courier,monospace;">
  
e   extended
style="font-family: Courier New,Courier,monospace;">
  
p   primary partition (1-4)
style="font-family: Courier New,Courier,monospace;">
pstyle="font-family: Courier New,Courier,monospace;">
Partition
number (1-4): 2
style="font-family: Courier New,Courier,monospace;">
First
cylinder (3650-14593, default 3650):
style="font-family: Courier New,Courier,monospace;">
Using default
value 3650


Last cylinder
or +size or +sizeM or +sizeK (3650-14593, default 14593): +3647
style="font-family: Courier New,Courier,monospace;">



Checamos si no se traslapa:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): p



Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3649   
29310561   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda2           
3650        7297   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">



El slice para el OpenBSD (3647 cilindros):



style="font-family: Courier New,Courier,monospace;">Command (m for
help): n

Command actionstyle="font-family: Courier New,Courier,monospace;">
  
e   extended
style="font-family: Courier New,Courier,monospace;">
  
p   primary partition (1-4)
style="font-family: Courier New,Courier,monospace;">
pstyle="font-family: Courier New,Courier,monospace;">
Partition
number (1-4): 3
style="font-family: Courier New,Courier,monospace;">
First
cylinder (7298-14593, default 7298):
style="font-family: Courier New,Courier,monospace;">
Using default
value 7298


Last cylinder
or +size or +sizeM or +sizeK (7298-14593, default 14593): +3647
style="font-family: Courier New,Courier,monospace;">



Checamos de nuevo si no se traslapa:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): p



Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3649   
29310561   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda2           
3650        7297   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda3           
7298       10945   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">



Y por último, el slice de NetBSD (los últimos 3647
cilindros):



style="font-family: Courier New,Courier,monospace;">Command (m for
help): n

Command actionstyle="font-family: Courier New,Courier,monospace;">
  
e   extended
style="font-family: Courier New,Courier,monospace;">
  
p   primary partition (1-4)
style="font-family: Courier New,Courier,monospace;">
pstyle="font-family: Courier New,Courier,monospace;">
Selected
partition 4
style="font-family: Courier New,Courier,monospace;">
First
cylinder (10946-14593, default 10946):
style="font-family: Courier New,Courier,monospace;">
Using default
value 10946
style="font-family: Courier New,Courier,monospace;">
Last cylinder
or +size or +sizeM or +sizeK (10946-14593, default 14593):
style="font-family: Courier New,Courier,monospace;">
Using default
value 14593





Aqui si no hubo necesidad de teclear el valor ya que le indicamos a
fdisk que ocupe todo el espacio restante para ese nuevo slice.



Y verificamos de nuevo:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): p



Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3649   
29310561   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda2           
3650        7297   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda3           
7298       10945   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">
/dev/sda4          
10946       14593   
29302560   83  Linux
style="font-family: Courier New,Courier,monospace;">



Y vemos con gusto que los cuatro slices pueden style="font-style: italic;">"convivir" sin problemas en el
disco duro.



Rectificamos que todo haya salido como lo esperabamos:



cellpadding="2" cellspacing="2">


























3649 - 1= 3648Solaris.
7297- 3650 = 3647FreeBSD.
10945- 7298= 3746OpenBSD.
14593- 10946= 3746NetBSD.



Cambiando el tipo de sistema a los slices




El fdisk de GNU/Linux crea por default slices con el tipo de sistema 83
(Linux).



Vamos a cambiárselos para corregirlos:



Primero para el Solaris:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): t

Partition
number (1-4): 1
style="font-family: Courier New,Courier,monospace;">
style="font-family: Courier New,Courier,monospace;">Hex code (type L
to list codes): bfstyle="font-family: Courier New,Courier,monospace;">
Changed
system type of partition 1 to bf (Solaris)
style="font-family: Courier New,Courier,monospace;">



Ahora para el FreeBSD:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): t

Partition
number (1-4): 2
style="font-family: Courier New,Courier,monospace;">
Hex code
(type L to list codes): a5
style="font-family: Courier New,Courier,monospace;">
Changed
system type of partition 2 to a5 (FreeBSD)
style="font-family: Courier New,Courier,monospace;">



El OpenBSD:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): t

Partition
number (1-4): 3
style="font-family: Courier New,Courier,monospace;">
Hex code
(type L to list codes): a6
style="font-family: Courier New,Courier,monospace;">
Changed
system type of partition 3 to a6 (OpenBSD)





Y por último el NetBSD:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): t

Partition
number (1-4): 4
style="font-family: Courier New,Courier,monospace;">
Hex code
(type L to list codes): a9
style="font-family: Courier New,Courier,monospace;">
Changed
system type of partition 4 to a9 (NetBSD)





Y checamos:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): p



Disk
/dev/sda: 120.0 GB, 120034123776 bytes
style="font-family: Courier New,Courier,monospace;">
255 heads, 63
sectors/track, 14593 cylinders
style="font-family: Courier New,Courier,monospace;">
Units =
cylinders of 16065 * 512 = 8225280 bytes
style="font-family: Courier New,Courier,monospace;">


  
Device Boot     
Start        
End      Blocks   Id  System
style="font-family: Courier New,Courier,monospace;">
/dev/sda1              
1        3649   
29310561   bf  Solaris
style="font-family: Courier New,Courier,monospace;">
/dev/sda2           
3650        7297   
29302560   a5  FreeBSD
style="font-family: Courier New,Courier,monospace;">
/dev/sda3           
7298       10945   
29302560   a6  OpenBSD
style="font-family: Courier New,Courier,monospace;">
/dev/sda4          
10946       14593   
29302560   a9  NetBSD





Si deseas obtener la lista de los sistemas disponibles, teclea style="font-style: italic;">'L' cuando el tipo de sistema.



Por ejemplo, para conocer el número de sistema para el Solaris:



style="font-family: Courier New,Courier,monospace;">Command (m for
help): t

Partition
number (1-4): 1
style="font-family: Courier New,Courier,monospace;">
Hex code
(type L to list codes): L
style="font-family: Courier New,Courier,monospace;">


 0 
Empty          
1e  Hidden W95 FAT1 80  Old
Minix       be  Solaris
boot  
style="font-family: Courier New,Courier,monospace;">
 1 
FAT12          
24  NEC DOS        
81  Minix / old Lin bf 
Solaris       
style="font-family: Courier New,Courier,monospace;">
 2 
XENIX root      39  Plan
9          82  Linux
swap / So c1  DRDOS/sec (FAT-
style="font-family: Courier New,Courier,monospace;">
 3 
XENIX usr       3c 
PartitionMagic  83 
Linux          
c4  DRDOS/sec (FAT-
style="font-family: Courier New,Courier,monospace;">
 4 
FAT16 <32M      40  Venix
80286     84  OS/2 hidden C:  c6 
DRDOS/sec (FAT-
style="font-family: Courier New,Courier,monospace;">
 5 
Extended        41  PPC PReP
Boot   85  Linux extended  c7 
Syrinx        
style="font-family: Courier New,Courier,monospace;">
 6 
FAT16          
42 
SFS            
86  NTFS volume set da  Non-FS data   
style="font-family: Courier New,Courier,monospace;">
 7 
HPFS/NTFS       4d 
QNX4.x          87 
NTFS volume set db  CP/M / CTOS / .
style="font-family: Courier New,Courier,monospace;">
 8 
AIX            
4e  QNX4.x 2nd part 88  Linux plaintext de  Dell
Utility  
style="font-family: Courier New,Courier,monospace;">
 9 
AIX bootable    4f  QNX4.x 3rd part 8e  Linux
LVM       df 
BootIt        
style="font-family: Courier New,Courier,monospace;">
 a 
OS/2 Boot Manag 50  OnTrack DM     
93  Amoeba         
e1  DOS access    
style="font-family: Courier New,Courier,monospace;">
 b 
W95 FAT32       51  OnTrack DM6 Aux
94  Amoeba BBT      e3  DOS
R/O       
style="font-family: Courier New,Courier,monospace;">
 c 
W95 FAT32 (LBA) 52 
CP/M           
9f  BSD/OS         
e4  SpeedStor     
style="font-family: Courier New,Courier,monospace;">
 e 
W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi
eb  BeOS fs       
style="font-family: Courier New,Courier,monospace;">
 f 
W95 Ext'd (LBA) 54  OnTrackDM6     
a5  FreeBSD        
ee  EFI GPT       
style="font-family: Courier New,Courier,monospace;">
10 
OPUS           
55  EZ-Drive        a6 
OpenBSD         ef  EFI
(FAT-12/16/
style="font-family: Courier New,Courier,monospace;">
11 
Hidden FAT12    56  Golden
Bow      a7 
NeXTSTEP        f0 
Linux/PA-RISC b
style="font-family: Courier New,Courier,monospace;">
12 
Compaq diagnost 5c  Priam Edisk     a8 
Darwin UFS      f1 
SpeedStor     
style="font-family: Courier New,Courier,monospace;">
14 
Hidden FAT16 <3 61 
SpeedStor       a9 
NetBSD          f4 
SpeedStor     
style="font-family: Courier New,Courier,monospace;">
16 
Hidden FAT16    63  GNU HURD or Sys ab  Darwin
boot     f2  DOS secondary 
style="font-family: Courier New,Courier,monospace;">
17 
Hidden HPFS/NTF 64  Novell Netware  b7  BSDI
fs         fd  Linux raid
auto


18  AST
SmartSleep  65  Novell Netware  b8  BSDI
swap       fe 
LANstep       
style="font-family: Courier New,Courier,monospace;">
1b 
Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid
ff 
BBT           
style="font-family: Courier New,Courier,monospace;">
1c 
Hidden W95 FAT3 75 
PC/IX         
style="font-family: Courier New,Courier,monospace;">
Hex code
(type L to list codes): bf
style="font-family: Courier New,Courier,monospace;">
Changed
system type of partition 1 to bf (Solaris)





Guardando los cambios


Si algo falla podemos empezar de nuevo las veces que sea necesario
*ANTES* de escribir los
cambios, fdisk no toca el disco duro hasta que
no le des el comando 'w':



style="font-family: Courier New,Courier,monospace;">Command (m for
help): w




Puedes incluso "jugar" con el
fdisk con el sistema actual que
estás usando pero sinceramente no te lo recomiendo ya que puedes
eliminar la partición "horny"
y ni Dios lo quiera.



Si llegase a pasar, apaga inmediatamente la máquina, imprime
este
documeto "href="http://www.tldp.org/HOWTO/Partition-Rescue/index.html"
target="_top">Partition-Rescue,
Partition Rescue mini HOWTO" y mucha suerte
recuperando tu partición.



Y listo.



¿Y tu, cómo particionas tu disco duro?




sábado, 25 de agosto de 2007

Sound

Sound player:











Download file:

Download Sound File

viernes, 13 de julio de 2007

viernes, 22 de junio de 2007

Mononeurona.org

#mononeurona.org

Conversaciones con #mononeurona.org


(11:03:12) El tema de #mononeurona.org es: .:: Mononeurona.org ::. Despabilando la mononeurona
(11:03:32) modo (+o saidjose ) por ChanServ
(11:03:41) ***ArCaX-ATH is away: .
(11:03:55) saidjose: Hola a todos
(11:04:32) asarch: Saludos saidjose
(11:04:35) asarch: Como estas?
(11:04:37) asarch: Buenos dias
(11:04:43) asarch: Bienvenido
(11:04:45) saidjose: Bien con mucho calor buenos dias asarch
(11:04:56) asarch: Chido pa' las chelas, no Nergar?
(11:05:10) asarch: Por cierto, murio el Charro de Mexico :(
(11:05:18) Nergar: que onda saidjose!
(11:05:36) Black_Soul: hola said
(11:05:39) Nergar: pues por eso dio que quien se anima?
(11:05:56) saidjose: Hola Nergar
(11:06:12) saidjose: fallecio Antonio Aguilar cuando?
(11:06:43) Nergar: monouser738055, que onda?
(11:06:58) Black_Soul: ayer en la noche
(11:09:17) Nergar: D:
(11:10:12) saidjose: lastima que estoy lejos se me antojan unas de media
(11:11:28) Black_Soul: voy a chambera para tener mas chance libre mas tarde para la platica
(11:18:01) monouser2338347 [n=monouser@201.116.70.197] ha entrado en la sala.
(11:18:16) monouser2338347 ha salido de la sala (quit: Client Quit).
(11:18:33) xhaman [n=xhaman@201.116.70.197] ha entrado en la sala.
(11:19:29) monouser738055 ha salido de la sala (quit: "Ahi se ven!").
(11:20:25) xhaman ha salido de la sala.
(11:41:47) Beremiz [n=kvirc@189.141.101.237] ha entrado en la sala.
(11:42:54) Beremiz: listo para la accion...
(11:43:51) Drawsoek [n=Drawsoek@189.174.133.72] ha entrado en la sala.
(11:43:53) modo (+v Drawsoek ) por ChanServ
(11:50:28) Nergar: que onda?
(11:51:20) Nergar: me hablo aarkerio al cel y dice que llega como a la una
(11:53:06) Drawsoek: chale..
(11:53:10) Drawsoek: talvez no me pueda quedar.
(11:54:07) Nergar: jajajaja
(11:54:10) Nergar: es broma
(11:54:18) Nergar: chale asarch que oedo con tus post
(11:54:27) Nergar: pedo**
(11:54:35) Beremiz: se entendio
(11:56:18) geektor [n=geektor@189.139.112.117] ha entrado en la sala.
(11:56:35) ***ArCaX-ATH is back (gone 00:52:54)
(11:56:40) Beremiz: la entrada de los nipos en el blog de aarkerio esta chido
(11:56:44) modo (+v geektor ) por ChanServ
(11:56:46) Nergar: asarch, mueve ese post a tu blog
(11:57:08) Nergar: no va a venir diablo?
(11:57:29) geektor: Buenos dias a todos....
(11:57:39) Beremiz: buenas
(11:58:01) saidjose: buenas geektor y Beremiz
(11:59:37) Beremiz: aqui atras hay un tipo jugando un juego muy violento
(11:59:41) Beremiz: esta chido
(12:00:44) Beremiz: The Punisher
(12:01:26) aarkerio [n=manuel@189.146.128.129] ha entrado en la sala.
(12:01:36) aarkerio: I'm here!
(12:01:45) ArCaX-ATH: mr. aarkerio
(12:01:59) Nergar: que onda aarkerio
(12:02:36) aarkerio: k hongo!
(12:02:44) guerretmx [n=operador@189.146.47.95] ha entrado en la sala.
(12:02:46) Beremiz: hi
(12:03:14) saidjose: hi mr. aarkerio
(12:04:56) aarkerio: bueno, seguimos donde nos quedamos
(12:04:56) Nergar: que onda aarkerio, hoy si vas a querer moderacion en la platica, para que sea de mas facil lectura el log???
(12:05:15) aarkerio: nos quedamos en organizarnos para liberar la versi?n 0.1 de Karamelo y la 0.3 de Centauro
(12:05:24) aarkerio: Nergar, ok
(12:05:28) Beremiz: eso, empesemos
(12:05:33) modo (-oo Black_Soul saidjose ) por Nergar
(12:05:50) modo (-vvv aarkerio Drawsoek geektor ) por Nergar
(12:06:12) aarkerio: hab?amos dicho que a mediano plazo (3 o 6 meses)
(12:06:21) Nergar: A TODOS LES PIDO QUE SE METAN A #mononeurona.org-chat
(12:06:30) aarkerio: deb?amos generar ingresos por nuestros productos de software
(12:06:42) modo (+m ) por Nergar
(12:07:05) modo (-v ArCaX-ATH ) por Nergar
(12:07:09) modo (+v aarkerio ) por Nergar
(12:07:20) omx [n=omx@189.143.190.130] ha entrado en la sala.
(12:07:39) aarkerio: pero que pasa con lo que lleguen luego?
(12:08:52) Nergar: PARA TODOS: auqi es solo para que aarkerio hable, los demas pueden hacer preguntas en #mononeurona.org-chat
(12:09:11) Nergar: los que lleguen luego los mando a #mononeurona.org-chat
(12:09:39) aarkerio: Nergar, no estoy seguro si ese esquema es el mejor
(12:09:56) aarkerio: la idea de est? reuni?n es que todos hablemos
(12:10:08) Nergar: como tu quieras
(12:10:33) Nergar: okas
(12:10:35) aarkerio: sobre todo porque debemos discutir algunas cosas
(12:10:37) modo (-m ) por Nergar
(12:10:41) Nergar: listo
(12:10:44) aarkerio: en fin, anyhow
(12:10:54) aarkerio: nos quedamos en organizarnos para liberar la versi?n 0.1 de Karamelo y la 0.3 de Centauro
(12:11:03) aarkerio: hab?amos dicho que a mediano plazo (3 o 6 meses)
(12:11:08) aarkerio: deb?amos generar ingresos por nuestros productos de software
(12:11:18) guerretmx ha salido de la sala (quit: "Saliendo").
(12:11:41) aarkerio: y que para eso deb?amos innovar en lo que hacemos
(12:11:42) modo (+o aarkerio ) por Nergar
(12:11:42) guerretmx [n=operador@189.146.47.95] ha entrado en la sala.
(12:11:56) aarkerio: que estabamos usando CakePHP como framework MVC
(12:12:09) aarkerio: y tambipen que estabamos usando Subversion (SVN) y Trac
(12:12:17) aarkerio: como herramientas de desarrollo
(12:12:34) Nergar: aarkerio, yo tengo una idea que se podria vender bien
(12:12:40) aarkerio: p?r tanto todos los de la coperativa deb?amos conocer esas herramientas
(12:12:52) aarkerio: eso tambi?n: pensar en m?s poroductos
(12:13:02) aarkerio: cual es la idea Nergar?
(12:13:20) Nergar: mi madre trabaja vendiendo casas
(12:13:24) Nergar: bienes raices
(12:13:57) Nergar: y he visto como organizan las casas que tienen en venta, solo las tienen apuntadas en pizarron o cuadernos
(12:13:59) Drawsoek ha salido de la sala (quit: ).
(12:14:32) Nergar: podriamos hacer un software donde puedan dar de alta las casas y poder acceder a la base de datos mas eficientemente
(12:14:54) Nergar: y creo que se podria armar con PHP no?
(12:14:56) Beremiz: habria que agregarle un plus a eso
(12:15:04) aarkerio: si, podr?amos evaluar inicar un desarrollo ahi, s epodr?a incluso poner pel?culas para dar un caminata virtual por la casa
(12:15:21) Beremiz: ese es el plus que buscaba
(12:15:43) aarkerio: ese tipo de ideas es la que buscamos
(12:15:47) Nergar: exacto, una cuenta "guest" para ver las casas y cuantas "administrativas" para los vendedores
(12:16:21) aarkerio: pero tambi?n hay que tener presente no desplegarnos demasiado durante el primer a?o
(12:16:26) omix [i=omix@139-63-181-66.ip.mx.tachyon.net] ha entrado en la sala.
(12:16:27) modo (+o omix ) por ChanServ
(12:16:48) Beremiz: ademas se me ocurre agregar un contador de pasos a lugares importantes, escuelas, tiendas etc
(12:17:19) aarkerio: hay que tener varios productos para ver cual jala bien
(12:17:37) Beremiz: okis, primerop lo primero Centauro y Karamelo
(12:17:42) aarkerio: como sea la cuest?n es la misma: desarrollar sobre CakePHP usando SVN y Trac
(12:18:33) aarkerio: como hab?amos dicho SVN es el repositorio de Software
(12:19:05) aarkerio: uno "toma" y "deposita" el c?digo en el repositorio usando el comando "svn"
(12:20:19) aarkerio: como hab?amos dicho hay trunk, branches y tags
(12:20:27) aarkerio: en cada proyecto
(12:21:19) aarkerio: para tomar el c?digo de un proyecto:
(12:21:23) aarkerio: svn co https://devel.mononeurona.org/svn/public/centauro/trunk/ /path/to/save
(12:21:32) aarkerio: esla opci?n "co" del comando
(12:21:39) aarkerio: para tomar el c?digo de CakePHP:
(12:21:46) aarkerio: svn co https://svn.cakephp.org/repo/trunk/cake/1.1.x.x /path/to/save
(12:22:30) aarkerio: subversion est? configurado para que cualquiera, un usuario an?nimo, pueda tomar el c?digo
(12:23:05) aarkerio: los programas que bajamos como .tar.gz
(12:23:23) aarkerio: fueron exportados de subversion y luego comprimidos
(12:24:30) aarkerio: pero solo los usuarios autorizados
(12:24:42) aarkerio: pueden colocar c?digo en el repositorio
(12:24:54) aarkerio: as? que les pido que me envien un email a
(12:25:12) aarkerio: manuel ARROBA mononeurona DOR org
(12:25:25) aarkerio: con su nombre de usuario (el mismo que en la mononenurona)
(12:25:43) aarkerio: y el password que quieran (diferente del que usan en la MN)
(12:26:06) aarkerio: para darles permiso de escritura en los repositorios de Karamelo y Centauro
(12:26:22) Black_Soul: una pregunta...
(12:26:28) aarkerio: pueden irme enviandolo plz
(12:26:30) aarkerio: yeas
(12:27:00) Black_Soul: para quienes como yo no sabemos programar bien que o como contribuiremos?
(12:27:12) Beremiz: beta testers
(12:27:29) Black_Soul: (ya estoy leyendo sobre php)
(12:27:51) Nergar: pues aprendemos Black_Soul
(12:27:55) aarkerio: como tester al principio, luego desarrollando cosas peque?as
(12:28:03) Black_Soul: simon en eso estoy nergar
(12:28:08) Nergar: en eso estamos
(12:28:19) Black_Soul: ok xD
(12:28:26) aarkerio: la documetaci?n tambi?n es un buen de chamba
(12:29:08) aarkerio: pausa de tres minutos para envio de email (e ir al otro piso por caf? ;-) )
(12:29:16) Beremiz: okis
(12:29:20) saidjose: okey
(12:29:28) Black_Soul: ok
(12:30:15) Nergar: ya checaste los pdf que subi Black_Soul ?
(12:30:39) Black_Soul: los descarge pero estoy en güin2
(12:30:53) Black_Soul: asi que los leeré hasta que llegue a casa nergar
(12:31:05) Nergar: chido
(12:31:18) Nergar: si alguien no los ha visto; http://nergar.mtveurope.org/files.php
(12:32:23) xhaman [n=xhaman@201.116.70.197] ha entrado en la sala.
(12:33:08) Black_Soul: consegui un libro de php4 y con los pdf's espero comenzar con eso
(12:34:03) Black_Soul: lguien esta guardando el log?
(12:34:09) Nergar: yo
(12:34:14) asarch: Yo no, Gaim lo hace
(12:34:20) Nergar: lo pego en mi blog igual que el anterior
(12:34:22) ciBAt [n=angel@dsl-200-67-251-97.prod-empresarial.com.mx] ha entrado en la sala.
(12:34:22) modo (+o ciBAt ) por ChanServ
(12:34:23) aarkerio: bien, como saben PHP fue desarrollado por el dan?s Rasmus Lendorf por all? del 95
(12:34:25) asarch: Simon
(12:34:41) aarkerio: en princiupio fue una versi?n fresa de Perl
(12:34:59) dmesg [n=dmesg@netbsd/user/dmesg] ha entrado en la sala.
(12:34:59) modo (+o dmesg ) por ChanServ
(12:35:05) dmesg: holas :)
(12:35:15) Black_Soul: ok
(12:35:26) aarkerio: el probelma es que Lendorf no es un gran dise?ador de software, como los creadores de Pythn o ruby
(12:36:03) aarkerio: sin embargo 12 a?os desp?es PHP ha logrado un buen nivel en la POO
(12:36:34) aarkerio: y es mejor que otros lenguajes en el manejo de strings y las expresiones regulares
(12:36:56) aarkerio: la versi?n 5 de PHP ya es bastante potente y la 6 lo ser? m?s
(12:37:11) aarkerio: el lenguaje que usa Yahoo! para todas sus aplicaciones
(12:37:33) aarkerio: PHP ha tenido ?xito entre otras cosas porque se acopla a casi todas las bases de datos
(12:38:26) aarkerio: tiene funciones para casi todas ellas
(12:39:11) aarkerio: en nuestro caso usamos la BD PostgreSQL
(12:39:22) Beremiz: version?
(12:39:27) aarkerio: PostgreSQL est? le aversi?n 8.1
(12:39:34) Beremiz: okis
(12:39:35) Nergar: por que postgre y no MySQL?
(12:39:53) Beremiz: es + mejor =P
(12:40:18) aarkerio: PostgreSQL es un Chiqui-Oracle con mejor dise?o y robustez que MySQL
(12:40:33) aarkerio: no digo que MySQLc sea mala
(12:40:50) aarkerio: pero detr?s de Pgsql est?n los mejores desarroladores de Berkeley
(12:41:03) aarkerio: los mismos que desarrollaron los BSD
(12:41:23) aarkerio: de cualquier manera en el futuro
(12:41:34) aarkerio: los desarrollos que hagamos deben funcionar
(12:41:45) aarkerio: bien en casit todo
(12:41:52) aarkerio: desde sqlite hasta Oracle
(12:42:22) aarkerio: postgresql se instala: $sudo apt-get install postgresql-8.1
(12:42:30) aarkerio: en debian o ubuntu
(12:42:46) aarkerio: el conector para php5 se instala:
(12:42:54) aarkerio: postgresql se instala: $sudo apt-get install php5-pgsql
(12:42:58) xevox [n=xevox@nelug/developer/xevox] ha entrado en la sala.
(12:42:58) modo (+o xevox ) por ChanServ
(12:43:22) aarkerio: cuando instalamos postgresql se crea el usuario "postgres"
(12:43:32) xevox ha salido de la sala (quit: Read error: 104 (Connection reset by peer)).
(12:43:34) aarkerio: ya que el root nunca debe manejar la BD
(12:43:40) xevox [n=xevox@nelug/developer/xevox] ha entrado en la sala.
(12:43:41) modo (+o xevox ) por ChanServ
(12:43:54) aarkerio: podamos darle un nuevo password a este usuario:
(12:44:00) aarkerio: $sudo passwd postgres
(12:44:01) xevox: :D hola gente bonita jaja hoy si hay audiencia :D
(12:44:08) aarkerio: hi!
(12:44:27) Black_Soul: hola xevox
(12:44:39) xevox: Black_Soul, :)
(12:44:40) saidjose: hola xevox
(12:44:47) Beremiz: le damos privilegio de dba al nuevo usuario?
(12:44:52) Nergar: jajajajaja chale con ustedes
(12:44:55) xevox: saludos
(12:45:01) xevox: jaja se Nergar :D
(12:45:10) aarkerio: junto al usuario se instalan los archivos de configuraci?n en:
(12:45:11) aarkerio: /etc/postgresql/8.1/main/
(12:45:26) aarkerio: aqui ?sta el archivo pg_hba.conf
(12:45:56) aarkerio: que es muy importante pues indique quienes y de donde se pueden conectar a cuales bases de datos
(12:46:16) aarkerio: por default s?lo los usuarios en localhost (127.0.0.1)
(12:46:32) aarkerio: se pueden conectar a las bases de datos
(12:47:02) aarkerio: postgresql consta de un demonio asignado en el puerto 5432
(12:47:19) aarkerio: este es popiamente hablando la base de datos
(12:47:44) aarkerio: postgresql tambi?n consta de un cliente que se invoca con el comando "psql"
(12:48:12) aarkerio: para crear una base de datos nos cambiamos al usuario "postgres"
(12:48:18) aarkerio: $su postgres
(12:48:24) aarkerio: y la creamos:
(12:48:31) aarkerio: con el comando createdb
(12:48:59) aarkerio: $createdb -E UNICODE DBEMPRESA
(12:49:13) aarkerio: le -E indica la codificaci?n
(12:49:45) aarkerio: el nombre de las bases de datos siempre son en may?sculas y con "DB" al inicio
(12:50:04) aarkerio: en este caso DBEMPRESA
(12:50:22) aarkerio: o DBPRUEBA o DBCENTAURO o DBLOQUESEA, estamos?
(12:50:41) Black_Soul: simon
(12:50:47) aarkerio: una vez creada la BD nos conectamos a ella con el cliente:
(12:50:50) Beremiz: ok
(12:50:53) aarkerio: psql DBEMPRESA
(12:51:41) aarkerio: ver?n un mensaje con la version de pgsql
(12:52:24) aarkerio: si alguna vez reciven un mensaje como:
(12:52:24) aarkerio: psql: FATAL: no pg_hba.conf entry for host "[local]", user "www-data", database "DBCENTAURO", SSL off
(12:52:45) aarkerio: es que el usuario no tiene permisos en pg_hba.conf para acceder a esa base de datos
(12:52:59) aarkerio: deben editar el archivo y luego reinciar postgresql:
(12:53:21) aarkerio: $sudo /etc/init.d/postgresql-8.1 restart
(12:53:29) aarkerio: para que los cambios apliquen
(12:54:15) aarkerio: f?icamante la informaci?n de las bases de datos se almacenan en:
(12:54:16) aarkerio: /var/lib/postgresql
(12:55:29) aarkerio: con el comando \dt ven las tablas que hay en la base de datos
(12:56:38) aarkerio: hasta aqui bien?
(12:56:43) omx: pregunta
(12:56:56) aarkerio: yea
(12:57:00) Beremiz: si
(12:57:05) Black_Soul: simon
(12:57:06) asarch: All clear!
(12:57:13) omx: hice su postgres
(12:57:14) geektor: todo bien.
(12:57:19) aarkerio: algunas veces obtendr?n un mensaje como:
(12:57:21) aarkerio: ERROR: secuencia de bytes no v?lida para codificaci?n ?UTF8?: 0xed6e64
(12:57:28) omx: pero cuando kiero salir del cliente como??
(12:57:36) aarkerio: \q
(12:57:42) aarkerio: diagonal + q
(12:57:53) omx: a ya
(12:58:03) aarkerio: para obtener la ayuda diagona + ?
(12:58:03) aarkerio: \?
(12:58:03) ArCaX-ATH ha salido de la sala (quit: Connection timed out).
(12:58:55) aarkerio: si ven el mensaje de error quiere decir que hay una discrepancia de codificaci?n entre el cliente psql y la base de datos
(12:59:32) aarkerio: eso no lo vamos a cubrir pero tiene que configurar su ambiente en /etc/postgresql para que coincidan
(13:00:31) aarkerio: si le dan \dt
(13:00:43) Nergar: no relations found
(13:00:47) aarkerio: debe decir que no hay relaciones (tablas) en la base de datos
(13:00:55) aarkerio: vamos a crear una tabla
(13:01:00) monouser2185538 [i=monouser@132.248.116.2] ha entrado en la sala.
(13:01:00) aarkerio: vamos al URL:
(13:01:02) aarkerio: http://centauro.mononeurona.org/trac/browser/trunk/config/sql/centauro.sql
(13:01:11) monouser2185538 ahora se llama diablomx0
(13:01:35) aarkerio: a la l?nea 689
(13:01:40) aarkerio: 68 perd?n
(13:02:17) aarkerio: donde dice: CREATE TABLE langs (
(13:02:27) Black_Soul: aja
(13:03:22) aarkerio: cortamos y pegamos:
(13:03:24) aarkerio: CREATE TABLE langs (
(13:03:24) aarkerio: id serial PRIMARY KEY,
(13:03:24) aarkerio: lang varchar(50) NOT NULL,
(13:03:24) aarkerio: locale varchar(6) NOT NULL
(13:03:24) aarkerio: );
(13:04:35) aarkerio: en esta tabla langs estamos usando s?lo dos tipos de columna: serial y varchar
(13:04:39) omix: aarkerio, saludos.. esa tabla sirve igual para mysql ??
(13:04:57) aarkerio: las tablas son como hojas de c?lculo de Calc
(13:05:19) omx: serial no lo e vista en mysql
(13:05:55) aarkerio: no es mysql ser?a algo como:
(13:06:02) aarkerio: id int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
(13:06:03) Beremiz: depende de los tipos de datos que manejen cada una
(13:06:21) omix: okas :)
(13:06:23) diablomx0 ahora se llama diablomx
(13:06:32) diablomx ahora se llama diablomx0
(13:06:34) aarkerio: "serial" solo es un "shortcut" de postgresql para crear una secuencia
(13:06:52) asarch ha salido de la sala (quit: Read error: 104 (Connection reset by peer)).
(13:07:05) asarch [n=asarch@189.130.145.44] ha entrado en la sala.
(13:07:06) modo (+o asarch ) por ChanServ
(13:07:14) aarkerio: al crear la BD ver?n un anuncio como:
(13:07:15) aarkerio: NOTICE: CREATE TABLE crear? una secuencia impl?cita ?langs_id_seq? para la columna serial ?langs.id?
(13:07:40) aarkerio: que es una secuencia que por default empieza en cero para la tabla
(13:07:54) aarkerio: ahora si le dan \dt
(13:08:01) aarkerio: debe ver una tabla "langs"
(13:08:32) aarkerio: el nombre de las tablas es en plural y d epreferencia en ingl?s: users, companies, delivers, etc?tera
(13:08:35) diablomx0: aahh
(13:08:37) ajmrch [n=asarch@189.130.145.44] ha entrado en la sala.
(13:08:39) modo (+o ajmrch ) por ChanServ
(13:08:51) aarkerio: que trampa holgazanazo!
(13:09:06) diablomx0: jejeje
(13:09:11) diablomx0: aca llegando mi buen...
(13:09:15) aarkerio: cheeers!!
(13:09:34) diablomx0: podrias repetir todo desde el principio? jejeje
(13:09:41) aarkerio: bien en el caso de :
(13:09:43) aarkerio: id serial PRIMARY KEY
(13:10:09) aarkerio: estanos creando una secuencia en la columna "id" y aqui est? nuestra llave primaria
(13:10:45) aarkerio: la llave primaria es la encargada de que un rengl?n o "row" nunca se repita
(13:11:19) aarkerio: es decir, para la integridad de nuestra informaci?n es importante que cada renglon sea ?nico
(13:12:07) aarkerio: al indicar PRIMARY KEY postgresql no permitir? que dos renglones tengan la misma informaci?n en esa columna "id"
(13:12:17) aarkerio: por ejemplo
(13:12:26) aarkerio: si queremos insertar:
(13:12:39) aarkerio: INSERT INTO langs ("1", "lang", "locale") VALUES (1, 'Afrikaans', 'af_ZA');
(13:12:44) aarkerio: y luego:
(13:12:54) aarkerio: INSERT INTO langs ("1", "lang", "locale") VALUES (1, 'Ans', 'mm_ZA');
(13:13:18) aarkerio: postgresql enviar? un mensaje de error pues ya hay una columna con valor 1 en la columna id
(13:13:34) aarkerio: se entiende?
(13:13:40) Beremiz: sip
(13:13:43) Black_Soul: simon
(13:13:44) omix: sip..
(13:14:03) diablomx0: +- no es cierto si
(13:14:20) geektor: ok
(13:14:24) aarkerio: para poder hacer el segundo insert tendr?amos que borrar el primer rengl?n
(13:14:47) aarkerio: noten que el lugar de PRIMARY KEY podr?amos haber puesto:
(13:15:02) aarkerio: id serial NOT NULL UNIQUE
(13:15:30) aarkerio: y obtendr?amso la misma funcionalidad: asegurarnos que no exitan dos renglones id?nticos
(13:15:49) aarkerio: pues UNIQUE es un "constraint"
(13:15:59) ajmrch ha salido de la sala (quit: "BitchX: shaken, not stirred").
(13:16:06) aarkerio: que precisamente indica "?nico"
(13:16:50) aarkerio: bien, ahora agreguermos algunos rows a nuestra tabla
(13:17:08) aarkerio: cortando y pegando de la l?nea 74 a la 84
(13:18:35) aarkerio: noten que los nombres de columna llevan comilla doble y los valores comilla simple
(13:18:46) aarkerio: como en:
(13:18:47) aarkerio: INSERT INTO langs ("lang", "locale") VALUES ('Italian', 'it_IT');
(13:19:20) aarkerio: noten que no es necesario indicar el campo id pues postgresql sabe que debe sumar +1 en cada insert
(13:19:23) aarkerio: listo?
(13:19:35) Nergar: no
(13:19:42) diablomx0: perate...
(13:19:45) Beremiz: sip
(13:20:07) diablomx0: yastas...
(13:20:08) Nergar: que al copiar y pegar tambien se compian los numeros de linea
(13:20:29) geektor: ya esta
(13:21:08) omx: listo
(13:21:09) aarkerio: eso hay que borrarlos, copialos a Gedit y ahi los quietas, bien, vamos a hacer un SELECT, el m?s b?sico es:
(13:21:10) Nergar: chidou!
(13:21:12) aarkerio: SELECT * FROM langs;
(13:21:54) Nergar: bonito!
(13:21:55) aarkerio: el asterisco indica que el select debe traer todas las columnas
(13:22:05) aarkerio: pero podemos seleccionarlas:
(13:22:19) aarkerio: SELECT lang, id FROM langs;
(13:23:04) aarkerio: podemos ordenar nuestro select:
(13:23:23) Nergar: osea que con * es igaul que darle SELECT id, lang, locale FROM langs; ?
(13:23:25) Nergar: si no?
(13:23:40) diablomx0: xacto
(13:23:41) aarkerio: si, es igual
(13:23:50) aarkerio: SELECT id, lang, locale ORDER BY lang ASC;
(13:24:43) aarkerio: perd?n:
(13:24:44) aarkerio: SELECT id, lang, locale FROM langs ORDER BY lang ASC;
(13:24:59) aarkerio: ASC quiere decir ascendente
(13:25:26) aarkerio: si lo queremos en orden descendente:
(13:25:35) aarkerio: SELECT id, lang, locale FROM langs ORDER BY lang DESC;
(13:25:43) aarkerio: por default es ASC
(13:25:53) aarkerio: si lo queremos ordenado por id:
(13:25:57) aarkerio: SELECT id, lang, locale FROM langs ORDER BY id DESC;
(13:26:28) Nergar: y por que todas las instrucciones terminan con ;?
(13:26:50) ajmrch [n=ajmrch@189.130.145.44] ha entrado en la sala.
(13:27:00) aarkerio: si, el punto y coma es el "enter" del cliente de postgresql
(13:27:12) Nergar: a ta hueno
(13:27:20) aarkerio: si no la ponen el cursor cambiara
(13:27:22) Nergar: tipo qbasic
(13:27:37) aarkerio: tambi?n php termina con ;
(13:27:55) aarkerio: esto es asi porque hay queries muy largos
(13:28:37) aarkerio: podemos limitar nuestro queries con la opci?n limit:
(13:28:39) aarkerio: SELECT id, lang, locale FROM langs ORDER BY id DESC LIMIT 5;
(13:29:48) aarkerio: podemos poner un condicional WHERE:
(13:29:49) aarkerio: SELECT id, lang, locale FROM langs WHERE id < 6;
(13:30:04) omx: cuando haces un INSERT tinen autoincrement por default
(13:30:12) aarkerio: si
<;span style="color:#7a4f1f;">(13:30:15) omx: ok
(13:30:20) aarkerio: si declaraste la columna como serial
(13:30:31) aarkerio: o tambi?n:
(13:30:38) aarkerio: SELECT id, lang, locale FROM langs WHERE id <= 6;
(13:30:49) aarkerio: para "mayor o igual a seis"
(13:31:27) aarkerio: podmeos usar varias cosas:
(13:31:36) aarkerio: SELECT id, lang, locale FROM langs WHERE id <= 6 ORDER BY id DESC LIMIT 2;
(13:32:48) omix: okas ...
(13:33:05) aarkerio: para contar los renglones de un query usamos la funci?n cont():
(13:33:05) aarkerio: SELECT count(id) FROM langs WHERE id > 3;
(13:34:35) aarkerio: bien, vamos a editar un rengl?n:
(13:34:55) aarkerio: usamos el comando UPDATE:
(13:34:55) aarkerio: UPDATE langs SET lang='Azerbayan' WHERE id=4;
(13:35:46) aarkerio: cuando el campo es varchar usamos las comillas simples, si es n?merico como el campo "id"
(13:35:50) aarkerio: no las necesita
(13:36:11) aarkerio: debemos tener cuidado pues si le damos:
(13:36:13) diablomx0: okay
(13:36:15) aarkerio: UPDATE langs SET lang='Azerbayan';
(13:36:34) aarkerio: TODOS los rows se cambiaran
(13:37:09) aarkerio: para borrar un row:
(13:37:14) aarkerio: DELETE FROM langs WHERE id = 8;
(13:37:33) aarkerio: es por esto que el campo ID es tan importante y debe
(13:37:39) aarkerio: ser nuestro campo primario
(13:37:49) aarkerio: pues con el es con el que editamos
(13:37:59) aarkerio: si le dan:
(13:38:03) aarkerio: DELETE FROM langs;
(13:38:21) aarkerio: borrara TODOS los rows
(13:38:35) ArCaX-ATH [n=ArCaX@unaffiliated/arcax-ath] ha entrado en la sala.
(13:38:36) modo (+v ArCaX-ATH ) por ChanServ
(13:38:38) Black_Soul: simon
(13:39:45) omx ha salido de la sala (quit: Read error: 104 (Connection reset by peer)).
(13:39:56) aarkerio: al dise?ar una base de datos hay tablas principales y tablas de catalogo
(13:40:15) Beremiz: aja
(13:40:17) aarkerio: por ejemplo si tiene una tabla "users"
(13:40:46) aarkerio: donde deben almacenar los datos de cada usuario , entre ellos en que estado de la rep?blica vive
(13:41:06) aarkerio: es muy ineficiente tener una columna:
(13:41:15) aarkerio: estado varchar(100)
(13:41:38) aarkerio: donde iran "Veracruz" o "Tampico" o "Oaxaca"
(13:41:47) aarkerio: por ciero el n?mero en varchar()
(13:42:01) aarkerio: es el n?mero de caracteres m?ximo de esa columna
(13:42:07) aarkerio: se entiende?
(13:42:10) Nergar: que es varchar?
(13:42:12) Black_Soul: simon
(13:42:24) omx [n=omx@189.143.190.130] ha entrado en la sala.
(13:42:25) aarkerio: alfanumerico
(13:42:31) aarkerio: numeros y letras
(13:42:43) Nergar: ok
(13:42:47) aarkerio: elos campos tipo "int" son n?mericos
(13:42:58) aarkerio: los tipo "date" guardan la fecha
(13:43:09) Nergar: chido ya lo intiendo
(13:43:26) Nergar: y el () es el limite
(13:43:47) aarkerio: si por ejemplo si creo el campo
(13:43:54) aarkerio: como varchar(4)
(13:44:06) Black_Soul: el (100) es el limikte
(13:44:11) aarkerio: y luego quiero insertar "mononeurona" en ?l
(13:44:14) aarkerio: postgresql me dara un error
(13:44:19) Black_Soul: o (4)
(13:44:19) Nergar: mono
(13:44:22) ajmrch ha salido de la sala ("Kopete 0.12.3 : http://kopete.kde.org").
(13:44:24) ArCaX-ATH: hay charlas sql veo ;)
(13:44:55) aarkerio: en los campos de m?s de 250 caracteres se usa el tipo "text"
(13:45:01) aarkerio: que no tiene l?mite
(13:45:28) Black_Soul: ok
(13:45:50) aarkerio: bien coo deciamos en la tabla "users"
(13:45:58) aarkerio: es muy ineficiente tener una columna:
(13:46:08) aarkerio: estado varchar(100)
(13:46:25) aarkerio: en lugar de eso creo una tabla de catalogo "estados":
(13:47:07) aarkerio: CREATE TABLE estados (
(13:47:08) aarkerio: id serial PRIMARY KEY,
(13:47:08) aarkerio: name varchar(80) NOT NULL
(13:47:08) aarkerio: );
(13:47:20) aarkerio: y pongo los 32 edos en ella:
(13:47:41) aarkerio: INSERT INTO estados ("name") VALUES ('Oaxaca');
(13:47:45) aarkerio: INSERT INTO estados ("name") VALUES ('Yucatan');
(13:47:54) aarkerio: INSERT INTO estados ("name") VALUES ('Zacatecas');
(13:47:54) Black_Soul: simon
(13:47:56) aarkerio: et?etera
(13:48:15) aarkerio: y luego en la tabla "users" creo una columna:
(13:49:03) aarkerio: estado int REFERENCES estados(id) ON DELETE CASCADE NOT NULL
(13:49:44) aarkerio: esto quiere decir que en la columna "estados" de la tabla "users"
(13:50:02) aarkerio: va a estra el id de la tabla "estados"
(13:50:51) aarkerio: ON DELETE CASCADE es opcional y quiere decir que si se borra un estado se borran los usuarios relacionados
(13:51:08) aarkerio: asi que es una opci?n que hay que usar con cuidado
(13:51:34) aarkerio: se entiende?
(13:52:00) omix: sip... :)
(13:52:22) aarkerio: por ejemplo en la linea 768 de:
(13:52:22) aarkerio: http://centauro.mononeurona.org/trac/browser/trunk/config/sql/centauro.sql
(13:52:30) aarkerio: esta la tabla "themes"
(13:53:14) aarkerio: 728 perd?n
(13:53:30) omx: si
(13:53:32) Juan_Luis [n=chatzill@200-126-69-163.bk5-dsl.surnet.cl] ha entrado en la sala.
(13:53:34) Juan_Luis ahora se llama Juan
(13:53:51) Juan ha salido de la sala (quit: Client Quit).
(13:53:55) kraxbox [i=abraham@140-63-181-66.ip.mx.tachyon.net] ha entrado en la sala.
(13:53:59) aarkerio: est? tabla contiene los temas de la mononeurona: pol?tica, GNU, Humor, Gadgets
(13:54:32) modo (+v kraxbox ) por ChanServ
(13:54:32) aarkerio:; est? es una tabla de catalogo para la tabla "news"
(13:54:44) aarkerio: que est? en le l?nea 748
(13:55:01) modo (+o kraxbox ) por omix
(13:55:11) aarkerio: la tabla "news" tiene la columna:
(13:55:12) aarkerio: theme_id int NOT NULL REFERENCES themes(id) ON DELETE CASCADE,
(13:56:45) aarkerio: por ejemplo en la p?gina:
(13:57:59) aarkerio: http://www.mononeurona.org/news/display/1281
(14:00:31) aarkerio: estoy consultando la tabla news con este query :
(14:00:49) aarkerio: SELECT N.id, N.title, N.body, T.theme, T.img FROM news AS N, themes AS T WHERE N.id=1281 AND N.theme_id = T.id
(14:01:43) aarkerio: y me regresa:
(14:01:44) aarkerio: id | title | body | theme | img
(14:01:46) aarkerio: ------+-------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+-------------------
(14:01:46) aarkerio: 1281 | Sin explicaciones | Sin ninguna justificación y de manera unilateral el banco HSBC canceló la cuenta de la asociacion Honestidad Valiente A.C. que era la vía para recaudar fondos para el movimiento del ex-candidato presidencial.<br />
(14:01:47) aarkerio: <br />
(14:01:49) aarkerio: El banco no ofreció alguna razón para la cancelación, sólo entregó el saldo  de 15 millones de pesos que había en ella. El acto perjudica al movimiento Lopezobradorista pues el número de cuenta está impreso en miles de trípticos y posters y es conocida por muchos como la "pejecuenta".<br />
(14:01:53) aarkerio: <br />
(14:01:57) aarkerio: HSBC (ex Bital) es uno de los más beneficiados por el FOBAPROA y posee lazos tanto con la ultraderecha mexicana como con la española. El banco fue acusado de filtrar los estados de cuenta de Cuauhtémoc Cárdenas cuando era candidato presidencial.<br />
(14:02:01) aarkerio: <br />
(14:02:03) aarkerio: Es curioso como muchas personas de izquierda ven más allá de López Obrador, mientras que la derecha siempre lo tiene presente, como un fantasma que no se va.<br />
(14:02:06) aarkerio: <br />
(14:02:08) aarkerio: <div align="center"><img alt="LO" src="http://eur.news1.yimg.com/eur.yimg.com/ng/sp/eurpr_profile/20060630/andres-manuel-lopez-obrador.jpg" /></div> | Politica | tema-politica.png
(14:02:11) aarkerio: (1 row)
(14:02:21) aarkerio: el n?nmero de noticia me lo pasa el url:
(14:02:30) aarkerio: http://www.mononeurona.org/news/display/1281
(14:03:19) aarkerio: dudas?
(14:03:42) Beremiz: esta chido
(14:03:48) diablomx0: de que es lap latica? no te creas esta bi?n
(14:04:21) Beremiz: Las primeras letras son alias de las tablas
(14:04:23) Beremiz: ??
(14:04:40) aarkerio: si
(14:04:43) Beremiz: okis
(14:04:57) aarkerio: con el parametro "AS"
(14:05:25) aarkerio: Con: N.theme_id = T.id
(14:05:47) aarkerio: es donde obtengo el tema que le corresponde a la noticia
(14:06:02) aarkerio: PHP tiene funciones para postgresql
(14:06:46) aarkerio: por ejemplo para conectarse se usa:
(14:07:26) aarkerio: $db = pg_connect('dbname=DBEMPRESA,username=postgres');
(14:10:08) aarkerio: duduas?
(14:10:32) Beremiz: nop
(14:11:54) aarkerio: bien vamos a:
(14:11:55) aarkerio: http://www.mononeurona.org/scripts/pgphp1.php
(14:12:16) Black_Soul: aja
(14:13:05) aarkerio: como pueden ver s?lo contiene un formulario:
(14:13:06) aarkerio: <html>
(14:13:07) aarkerio: <body>
(14:13:07) aarkerio: <h1>Addin new user</h1>
(14:13:07) aarkerio: <form action="add.php" method="post">
(14:13:07) aarkerio: First Name : <input type="text" name="firstname" size="40" length="40" value="First Name"><BR>
(14:13:09) aarkerio: Surname : <input type="text" name="surname" size="40" length="40" value="Surname"><BR>
(14:13:11) aarkerio: Email Address : <input type="text" name="emailaddress" size="40" length="40" value="Email Address"><BR>
(14:13:15) aarkerio: <input type="submit" name="submit" value="Submit">
(14:13:16) aarkerio: <input type="reset" name="reset" value="Clear It">
(14:13:18) aarkerio: </form>
(14:13:20) aarkerio: </body>
(14:13:23) aarkerio: </html>
(14:13:43) aarkerio: en internet hay dos m?todos para enviar informaci?n, el GET y el POST
(14:13:57) Black_Soul: simon
(14:14:01) Beremiz: si
(14:14:08) aarkerio: el m?todo GET ya lo vimos
(14:14:14) Beremiz: aja
(14:14:17) aarkerio: se usa sobre todo en el URL
(14:14:23) Black_Soul: aja
(14:14:45) aarkerio: el m?todo POST es mas nuevo y mejor
(14:14:55) aarkerio: es el que estaos indicando con:
(14:15:00) aarkerio: <form action="add.php" method="post">
(14:15:44) aarkerio: el tag form indica a que script vamos a envira la informaci?n y con que m?todo
(14:16:04) aarkerio: en este caso lo vamos a enviar al script "add.php"
(14:16:14) aarkerio: que es el que recibe los datos
(14:16:56) aarkerio: tambi?n estamos usando tres campos INPUT typo text
(14:17:17) aarkerio: los formularios pueden tener diferentes tipos de elementos
(14:18:07) aarkerio: por ejemplo pueden tener un campo oculto:
(14:18:31) aarkerio: <input type="hidden" name="gruop" value="teachers" />
(14:18:46) aarkerio: este campo hidden el usuario no lo ve
(14:18:57) aarkerio: pero igual ser? enviado al script add.php
(14:19:46) omx: el objetivo de este tipo de campos cual es??
(14:19:54) aarkerio: el campo hidden es muy ?til por ejemplo si el usuario debe llenar dos pantallas de formularios, podemos enviar los datos
(14:20:10) aarkerio: de la primera pantalla:
(14:20:53) aarkerio: <input type="hidden" name="pais" value="<?php echo $_POST['country'] ?>" />
(14:20:59) aarkerio: es decir
(14:21:14) aarkerio: si trabajas en una empresa transnacional
(14:21:42) aarkerio: en la primera pantalla el usuario te indica de que pa?s es y que tipo de servicio quiere
(14:21:54) aarkerio: y pasa a una segunda pantalla con informaci?n extra
(14:22:19) aarkerio: para no perder los datos de la primera pantalla los "llevas" ala segunda como ocultos
(14:22:26) Beremiz: ohhh, para ofrecer servicios de acuerdo al perfil?
(14:22:53) aarkerio: andale
(14:23:06) Black_Soul: aahh orale
(14:23:09) Black_Soul: chido
(14:23:30) aarkerio: los hidden son muy ?tiles por ejemplo para crear "wizards" en l?nea
(14:23:41) omx: entonces la lines que pusiste de html es del segun script, porque ya usas POST??
(14:24:10) Beremiz: estas captando datos que ya habian sido metidos con el submit
(14:24:20) aarkerio: si estamos usando post en en el ejemplo
(14:24:30) aarkerio: a ver otro ejemplo
(14:24:57) aarkerio: el usuario va a escribir un comentario y quieren saber la IP desde donde la est? enviando
(14:24:57) aarkerio: ponen el formulario del comentario
(14:25:05) omx: ok, sigue porfa
(14:25:06) aarkerio: y adem?s ponen un campo oculto
(14:25:25) Beremiz: (eso es invasion de la privacidad) cool
(14:25:31) omx: jajjaja
(14:25:38) diablomx0: jejeje
(14:25:47) Black_Soul: O_O
(14:25:49) aarkerio: <input type="hidden" name="ip" value="<?php echo $_SERVER['ADDRESS'] ?>" />
(14:26:10) aarkerio: y en el formulario el user env?a su IP
(14:26:31) omx: ok
(14:26:35) aarkerio: ya ver?n m?s adelante que hidden se usa en muchas ocasiones
(14:26:48) Beremiz: ok
(14:26:53) Black_Soul: vale
(14:27:26) aarkerio: en los formualrios tambi?n pueden usar los campos tipo checkbox
(14:27:44) aarkerio: <input type="checkbox" name="publicado" value="1" id="status" />
(14:28:19) aarkerio: los campos tipo checkbox s?lo pueden ser booleanos si / no
(14:29:00) Black_Soul: simon
(14:29:06) aarkerio: es decir se deben recibir con algo como:
(14:29:31) aarkerio: if ( isset( $_POST['publicado'] ) ) {
(14:29:45) aarkerio: $value= "Lo que sea";
(14:29:49) aarkerio: }else {
(14:30:00) aarkerio: $value = "otra cosa";
(14:30:02) aarkerio: }
(14:30:21) aarkerio: isset es la funcion que nos dice si una variable est? o no puesta
(14:30:54) aarkerio: generalmente en los checkboxes se usa los operadores ternarios:
(14:31:33) aarkerio: $value = ( isset( $_POST['publicado']) ) ? "El valor existe" : "No existe" ;
(14:31:59) Beremiz: ?L?
(14:32:30) diablomx0: chale medio entiendo...
(14:32:48) Beremiz: si se cumple regresa el primer valor, si no el segundo
(14:33:00) Beremiz: es el mismo que el de arriba
(14:33:04) aarkerio: los formularios puedne tener elementos como SELECT para "combos", textarea para textos largos
(14:33:53) aarkerio: si el trenario es una manera concetrada del IF
(14:34:33) aarkerio: veamos ahora el archivo add.php:
(14:34:35) aarkerio: <html>
(14:34:35) aarkerio: <body>
(14:34:35) aarkerio: <?php
(14:34:35) aarkerio: $db = pg_connect('host=localhost dbname=contacts user=contacts password=firstphp');
(14:34:35) aarkerio: $firstname = pg_escape_string($_POST['firstname']);
(14:34:36) aarkerio: $surname = pg_escape_string($_POST['surname']);
(14:34:38) aarkerio: $emailaddress = pg_escape_string($_POST['emailaddress']);
(14:34:40) aarkerio: $query = "INSERT INTO friends(firstname, surname, emailaddress) VALUES('" . $firstname . "', '" . $surname . "', '" . $emailaddress . "')";
(14:34:43) aarkerio: $result = pg_query($query);
(14:34:45) aarkerio: if (!$result) {
(14:34:47) aarkerio: $errormessage = pg_last_error();
(14:34:49) aarkerio: echo "Error with query: " . $errormessage;
(14:34:51) aarkerio: exit();
(14:34:53) aarkerio: }
(14:34:55) aarkerio: printf ("These values were inserted into the database - %s %s %s", $firstname, $surname, $emailaddress);
(14:35:00) aarkerio: pg_close();
(14:35:02) aarkerio: ?>
(14:35:04) aarkerio: </body>
(14:35:06) aarkerio: </html>
(14:35:12) aarkerio: como pueden ver lo que hace el script es abrir una conexi?n con pg_connect
(14:35:19) diablomx0: aja
(14:35:57) aarkerio: escapar los valores enviador en el formulario con:
(14:35:58) aarkerio: http://www.php.net/manual/en/function.pg-escape-string.php
(14:36:32) aarkerio: pg_escape cambia las comillas y valores que podr?an dificultar la inserci?n en postgresqs
(14:36:53) kraxbox ha salido de la sala (quit: "Saliendo").
(14:36:55) Beremiz: los puntos?
(14:37:20) aarkerio: no. creo que los puntos ni le estorban, m?s bien algunas diagonales \
(14:37:37) aarkerio: el query se arma con:
(14:37:38) aarkerio: $query = "INSERT INTO friends(firstname, surname, emailaddress) VALUES('" . $firstname . "', '" . $surname . "', '" . $emailaddress . "')";
(14:39:15) aarkerio: debe crear la tabla "friends":
(14:39:16) aarkerio: CREATE TABLE friends (
(14:39:16) aarkerio: id serial PRIMARY KEY,
(14:39:16) aarkerio: firstname varchar(100),
(14:39:16) aarkerio: surname varchar(100),
(14:39:18) aarkerio: emailaddress varchar(100)
(14:39:20) aarkerio: );
(14:40:12) xevox: /------------------------------------------------
(14:40:22) xevox: como puedo tomar log del canal depsues
(14:40:46) Nergar: en mi blog
(14:40:53) xevox: o.0
(14:41:08) Black_Soul: pregunta...
(14:41:24) Black_Soul: falta mucho ya hace hambre? :P
(14:41:35) dmesg: xD
(14:41:36) Nergar: shh
(14:41:40) Beremiz: tacos
(14:41:41) xevox: :P
(14:41:45) Beremiz: no es ssh?
(14:42:01) Black_Soul: orden!!
(14:42:02) Nergar: secure shell?
(14:42:06) Beremiz: okis
(14:44:11) xevox: interesante
(14:44:30) xevox ha salido de la sala (quit: ""me lo voy"").
(14:45:06) Nergar: que paso?
(14:45:24) Beremiz: aarkerio se quedo dormido o fue al ba?o
(14:45:31) aarkerio: ya para acabar
(14:45:35) Beremiz: o se fue a comer
(14:45:37) Nergar: jajajaja
(14:45:38) Beremiz: ups
(14:45:50) aarkerio: la pagina myfriends.php:
(14:45:54) aarkerio: <a href="pgphp1.php">Add new friend</a>
(14:45:54) aarkerio: <?php
(14:45:54) aarkerio: $conn = pg_connect('host=localhost dbname=contacts user=contacts password=firstphp');
(14:45:54) aarkerio: if (!$conn) {
(14:45:54) aarkerio: echo "An error occured.\n";
(14:45:54) aarkerio: exit;
(14:45:55) aarkerio: }
(14:45:57) aarkerio: $result = pg_query($conn, "SELECT firstname, surname, emailaddress FROM friends");
(14:46:01) aarkerio: if (!$result) {
(14:46:03) aarkerio: echo "An error occured.\n";
(14:46:05) aarkerio: exit;
(14:46:07) aarkerio: }
(14:46:09) aarkerio: while ($row = pg_fetch_row($result))
(14:46:11) aarkerio: {
(14:46:13) aarkerio: echo "Firstname:" . $row[0] ." surname: " . $row[1] . " E-mail: " . $row[2];
(14:46:15) aarkerio: echo "<br />\n";
(14:46:17) aarkerio: }
(14:46:19) aarkerio: ?>
(14:46:27) aarkerio: y asi presentan los datos de una tabla
(14:46:53) Beremiz: ohh
(14:47:01) diablomx0 ha salido de la sala (quit: ).
(14:47:32) Black_Soul: ok
(14:47:52) aarkerio: de tarea se queda la acci?n "delete" para borrar los registros de una tabla desde el navegador
(14:48:14) aarkerio: pueden colocar la conexi?n:
(14:48:16) aarkerio: $conn = pg_connect('host=localhost dbname=contacts user=contacts password=firstphp');
(14:48:20) Black_Soul: O_o
(14:48:22) Black_Soul: hay tarea!!!
(14:48:25) aarkerio: en el archivo "conecta.php"
(14:48:36) aarkerio: y luego incluirlo en donde lo necesiten:
(14:48:58) aarkerio: include "conecta.php";
(14:49:08) Beremiz: como libreria de c
(14:49:10) aarkerio: para no tnere que escribir los dato en todos los scripts
(14:49:12) aarkerio: exacto
(14:50:10) aarkerio: o usar include_once
(14:50:17) aarkerio: include_once("conecta.php");
(14:50:34) aarkerio: The include_once() statement includes and evaluates the specified file during the execution of the script. This is a behavior similar to the include() statement, with the only difference being that if the code from a file has already been included, it will not be included again. As the name suggests, it will be included just once.
(14:51:01) Beremiz: ohh
(14:51:56) aarkerio: sin embargo
(14:52:08) aarkerio: aqui estanos usando las funciones de PHP para postgresql
(14:52:36) aarkerio: pero la verdad es que en los ambientes profesionales se usa siempre una capa de abstracci?n
(14:53:13) aarkerio: con la capa de abstracci?n de base de datos podemos porgramnas ignorando si es para postgresql, mysql, oracle, sqlite, etc?tera
(14:53:35) aarkerio: las capas de bastracci?n m?s usadas en php son la MDB2 de PEAR:
(14:53:36) aarkerio: http://pear.php.net/manual/en/package.database.mdb2.php
(14:53:37) Nergar: aarkerio, que usas para escribir en PHP?
(14:53:43) aarkerio: Jedit.org
(14:53:45) Nergar: emacs, nano? gedit?
(14:53:50) Nergar: orale
(14:53:54) Nergar: dejo lo pruebo
(14:54:07) aarkerio: y ADODB:
(14:54:08) aarkerio: http://adodb.sourceforge.net/
(14:55:05) aarkerio: eso lo veremos luego
(14:55:16) aarkerio: sales, ha comer!!
(14:55:21) aarkerio: nos vemos luego
(14:55:29) Beremiz: ya veo, eso permite trabajar con "cualquier" baSE DE DATOS
(14:55:34) Black_Soul: sale gracias aakerio
(14:55:54) Beremiz: adius
(14:56:14) Black_Soul: estaba apunto de darle una mordida al gordito de manteniminto del hambre que tengo jjeje
(14:56:39) Beremiz: bye
(14:56:46) Beremiz ha salido de la sala ("So Long, and Thanks for All the Fish!").
(14:57:20) Nergar: chido
(14:57:54) geektor: ya esta.
(15:00:02) aarkerio: saidjose, puedes ver si funciona tu password en:
(15:00:03) aarkerio: http://centauro.mononeurona.org/trac
(15:01:55) aarkerio: todos podrian checar si funciona?
(15:02:13) geektor: el mio si... ;)
(15:02:19) geektor: thanks!
(15:04:07) guerretmx ha salido de la sala (quit: "Saliendo").
(15:04:24) saidjose: okey aakerio voy a verificar
(15:05:39) Black_Soul: yo tambien me logeo sin broncas
(15:06:28) ArCaX-ATH: aarkerio, como entrarias un ip en una tabla que es INT(10)
(15:07:03) ArCaX-ATH: y que tipo de tabla usarias para guardar un ip.
(15:07:07) aarkerio: ArCaX-ATH, creo que no se puede porque los puntos los toma como alfan?mericos
(15:07:20) aarkerio: ipv6 tambi?n?
(15:07:32) ArCaX-ATH: si
(15:08:37) aarkerio: una ipv6 ser?a algo como:
(15:08:38) aarkerio: fe80::213:20ff:fe59:ea7a/64
(15:08:54) aarkerio: crea que la columna como varchar(50)
(15:09:16) saidjose: nop no reconoce ni al usaurio ni al password
(15:11:28) omx ha salido de la sala (quit: "Leaving.").
(15:12:21) xhaman ha salido de la sala (quit: Read error: 110 (Connection timed out)).
(15:12:52) asarch ha salido de la sala (quit: "Leaving.").
(15:14:54) aarkerio: y si me deja entrar: logged in as saidjose
(15:19:07) saidjose: okey
(15:19:14) omix_ [n=omix@189.128.121.145] ha entrado en la sala.
(15:19:20) saidjose: a lo mejor es mi conocecion esta muy lenta
(15:20:12) saidjose: esto es lo me sale despues de poner el usuario y el password
(15:20:14) saidjose: Authorization Required This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
(15:25:53) dmesg ha salido de la sala (quit: "brb").
(15:27:15) omix_: aarkerio.. con cakephp podre realizar la pagina de mi escuela ???
(15:31:50) aarkerio: claro
(15:32:17) aarkerio: saidjose, que browser usas?
(15:35:01) saidjose: el firefox
(15:35:28) omix_: aarkerio, habria la posibilidad de q' nos ayudes en caso de atorarnos??
(15:35:59) aarkerio: omix, claro, cualquier cosa nos vemos por ac?
(15:44:32) geektor: me voy...estamos en contacto...Gracias aarkerio!
(15:44:45) aarkerio: see you!
(15:44:51) geektor ha salido de la sala ("Abandonando").
(15:53:29) saidjose: Pues no entra aarkerio, de hecho estoy en la oficina creo que la banda debe estar estrangulada por los p2p de todos los que trabajamos aqui, te mando un mail mas tarde para corraborar si puede entrar desde la casa
(15:53:41) aarkerio: okas
(15:57:52) omix_: aarkerio, si hablaste sobre cakephp... lo q' pasa es q estaba en la escuela.. y deje prendida la chompu de allá para grabar la conversacion
(15:58:07) omix_: orita estoy en mi casa
(15:58:17) aarkerio: omix, no hablamos mucho sobre CakePHP m?s bien de SQL
(15:59:12) omix_: okas..
(16:05:44) saidjose: Nergar tienes grabada la conversacion de SQL y CakePHP
(16:24:50) Black_Soul: sale mononeurones nosleemos mas tarde
(16:24:58) Black_Soul: suerte
(16:25:13) Black_Soul ha salido de la sala (quit: "ChatZilla 0.9.78.1 [Firefox 2.0.0.4/2007051502]").
(16:40:26) ArCaX [n=ArCaX@unaffiliated/arcax-ath] ha entrado en la sala.
(16:40:27) modo (+v ArCaX ) por ChanServ