Próximamente Solución del Reto
Mi pensar
Quiero avisar que en una semana más pondré la solución al reto que puse aquí en mi blog de la mononeurona. Para los que hayan tratado de resolverlo, tienen tiempo para hacerlo.
Como información adicional, este problemilla formó parte de un concurso local del ACM ICPC en la UTM, cuando fui jurado junto con mi cuate Juquila, y pues planteé este problema basándome en la idea de un problema de un SRM en Topcoder. No es exactamente la misma redacción que se usó en el concursito de la UTM, pero el problema a resolver es el mismo.
Permalink: http://www.mononeurona.org/users/entry/thot/1576
Mi nueva página
Mi pensar
Después de que me quitaron mi página de mictlan. Pues estoy tratando de levantar mi nueva página. Desgraciadamente apenas la estoy armando, estoy utilizando Joomla. Ya le puse el Geshi para resaltado de código. Y casi tiene toda la información que tenía la anterior, esto es, casi nada.
Lo único que he agregado nuevo, es la utilización de getopt para obtener los parámetros en un programa en C, por el reto que había puesto asarch.
Esperemos ahora sí pueda continuar todo lo que me he propuesto para esta página.
Permalink: http://www.mononeurona.org/users/entry/thot/1564
Mi primer aporte en código al Software Libre.
Programacion
La semana pasada estuve muy contento, porque afortunadamente fue aceptado mi proyecto en el Joomla Code.
El proyecto es muy simple es un módulo y un componente para administrar Efemérides, utilizando el poder del framework MVC que tiene Joomla para programar sus nuevos componentes, el cual no es nada despreciable. Este proyecto lo programé como un aporte para la migración de la página Revolucionemos Oaxaca a un nuevo servidor, con la nueva versión de Joomla 1.5 y con un nuevo diseño. Todo esto se hará próximamente, confiemos en que no pase de mediados del próximo mes.
Si alguien gusta simplemente se tiene que registrar en el Joomla Code, y unirse al proyecto. Es bastante simple el componente, y por lo mismo adecuado para quien desee iniciarse programando componentes en Joomla lo pueda hacer sin ningún problema. Si alguien gusta testearlo también se agradecería mucho.
Esta es mi primera aportación en código a la comunidad de Software Libre, no es gran cosa pero por algo se empieza.
Permalink: http://www.mononeurona.org/users/entry/thot/1550
Mis reflexiones sobre las "Fiestas Patrias"
Mi pensar
Advertencia: Está a punto de leer opiniones personales sobre algún tema, lo cual puede ser aburrido y a veces contrario a sus forma de ver las cosas. Eso forma parte de la siempre necesaria diversidad de pensamiento. Léase bajo su propio riesgo.
Caminando por las calles de algunas ciudades de Oaxaca, he notado ese fenómeno que seguramente se está dando en la mayoría de lugares en territorio mexicano, la famosa "exaltación del mexicanismo" en base a banderitas y demás artículos (chinos) que por alguna extraña razón hacen sentir a las personas más "mexicanas". Es extraño que en México ser mexicano se reduzca a "dar el grito de independencia, apoyar a la selección y ponerte borracho en las fiestas patrias". Cada vez que veo esto mientras camino, siento tristeza. Al buscar justificantes hay muchas, la ignorancia, la desinformación, la terrible influencia de los medios, y demás.
Pero ahora que se acerca el "Día de la Independencia", ¿qué festejamos? se supone que festejamos la "liberación" de México de la tiranía de la corona española. Bien. Y se gritará "¡Viva México! ¡Viva la independencia!", bla, bla. Y lo gritará quien se supone es el presidente de este país, y lo gritará con completo cinismo. ¿Cómo se puede gritar eso cuando ese "presidente" ha firmado la Iniciativa Mérida que es una forma de romper con esa "independencia" (1,2)? ¿Cómo se puede gritar eso cuando trata de regalar el único recurso que mantiene a flote el país, el petróleo, a empresas españolas (1,2,3), irónicamente cuando se festeja la independización de España?
Podría consolarme diciendo que "ahora ya no estamos bajo una monarquía, y menos extranjera". Pero no es gran consuelo, tomando en cuenta que "lo nuevos reyes" de México es menos del 5% de la población y esta "cúpula de poder" es una cúpula corrupta que puede matar (como ejemplo las locutoras triquis), desaparecer (la desaparición forzada de 2 eperristas ), cometer ilícitos (nexos de la cúpula con narcotraficantes y demás, por ejemplo el caso del procurador de tabasco), pasarse por el triunfo las leyes, dónde les importa un carajo lo que piense la mayoría de la gente, dónde usan los medios y son capaces de crear un clasismo estúpido en el mexicano desinformado, todo esto con total impunidad.
Otra forma de consuelo podría ser "pero hay democracia". Vaya ingenuidad, en un país con un par de fraudes electorales en menos de 25 años. Con un control electoral asqueroso en todos los estados, con representantes "populares" que simplemente buscan su beneficio o el beneficio de los "neoreyes".
Siempre que camino, y surgen todos esos pensamientos se me viene a la mente una canción "Neopatria" de un trovador poblado llamado Gerardo Pablo, aquí un pequeño extracto:
"Para quien no se ha dado cuenta
que la serpiente ya ha mordido
varias veces a nuestra águila
Y que no puede volar
y lleva tanto tiempo encadenada
entre los aguijones de un nopal"
Creo que el único consuelo que siempre está ahí, es la esperanza de que las cosas cambien, y sobre todo de tratar de que eso suceda aunque sea con esas pequeñas acciones que están en nuestras manos.
Permalink: http://www.mononeurona.org/users/entry/thot/1548
Reto
Programacion
Tomando en cuenta los retos que ha puesto asarch. (El primero usando unos comando de shell para hacer renombrado de grupos de archivos y el segundo de modificar el programa en C de saidjosé para que tomara los parámetros desde la línea de comandos, en estilo BSD y GNU). Ahora quisiera poner uno pequeño pero que tiene que ver con lógica y programación. Trataré de poner todas las restricciones que tenga el problema para encontrar la manera óptima de resolverlo.
Veamos el siguiente planteamiento:
Un pintor quiere pintar una línea de casas de un fraccionamiento, solamente es una calle. Y lo tiene que hacer de diferentes colores sin que un color se repita para 2 casas adyacentes, solamente cuenta con 3 colores para elegir. El tiempo para pintar una casa dependerá del tamaño de la casa, del color a utilizar y del color que tenga la casa en ese momento. El problema para el pintor es que necesita hacerlo lo más rápido posible, porque entre menos días se tarde ganará más, y podría seguir pintando algún fraccionamiento.
Entrada: Constará de un entero n en la primera línea, que dice el número de casas. Seguido de n líneas, cada una con 3 enteros representando el tiempo que se tardará el pintor en esa casa para cada color. Podrá haber hasta 10,000 casas.
Salida: Simplemente se debe imprimir el tiempo mínimo para pintar todas las casas.
Ejemplo:
Entrada:
3
26 40 83
49 60 57
13 89 99
Salida:
96
Restricciones: Se puede hacer en cualquier lenguaje de programación, hasta se puede solucionar simplemente con pseudocódigo. La restricción es que debería correr en menos de 1 segundo, para eso tomaremos como base que aproximadamente 1000,000,000 de operaciones (sumas, restas, comparaciones, etc) se ejecutan en aproximadamente 1 seg.
Cualquier duda que tengan sobre el problema, se las puedo aclarar. Si necesitaran ayuda sobre como leer la entrada o desplegar la salida, también se puede apoyar con eso.
Permalink: http://www.mononeurona.org/users/entry/thot/1531
Instalando OpenBSD 4.3
Programacion
Pondré aquí una guía rápida para la instalación de OpenBSD 4.3, aunque recomiendo ampliamente la guía de instalación de OpenBSD que está en la página oficial, ya que contempla la mayoría de casos que se pueden encontrar durante la instalación. Aunque no hay documentación "en exceso" de OpenBSD la que se encuentra es de muy buena calidad.
Lo primero que hay que hacer es descargar el ISO de la página de OpenBSD, en este caso es la versión para plataforma i386, para todas las demás en este enlace.
Ya teniendo la imagen ISO, lo quemamos en algún CD. (No creo que necesite ser tan explícito, pero aún así lo pongo).
Reiniciamos la máquina y booteamos con el CD.
Lo primero que preguntará es qué deseamos hacer:
root on rd0a swap on rd0b dump on rd0b
erase ^?, werase ^W, kill ^U, intr ^C, status ^T
(I)nstall, (U)pgrade or (S)hell?
En este caso elegimos instalar. (Upgrade instalará nuevos archivos pero no sustituye ningún archivo de configuración, Shell brindará un entorno para desarrollar tareas de mantenimiento).
Después de esto preguntará, qué tipo de terminal.
Terminal type: [vt220] (presionamos enter)
kbd(8) mapping? ('L' for list) [none]
(Si se presiona enter pondrá el teclado en la distribución estándar en inglés, si se quiere la distribución latina sería la).
Ahora procedemos con la instalación:
Proceed with install? [no] y
Available disks are: wd0.
Which one is the root disk? (or done) [wd0]
En este caso, voy a utilizar todo el disco para OpenBSD
Do you want to use *all* of wd0 for OpenBSD? [no] y
Ahora procedemos a crear las particiones y especificar su punto de montaje:
Para eso primero mostramos la información del disco, con p m
> p m
La partición c: sería el disco completo:
Para agregar una partición simplemente a . Por ejemplo: a a, a b, a d, a e, etc. Simplemente preguntará el offset (normalmente se le da Enter nada más), el tamaño, el tipo de sistema de archivos y el punto de montaje.
Ya creadas las particiones presionamos q para salir.
> q
Write new label?: [y] (Presionamos Enter)
Pedirá confirmación para todas las particiones con su respectivo punto de montaje, presionamos Enter, cuando estemos seguros de que ya está todo bien, tecleamos done. Con eso se procederá a guardar la información en el disco.
Le ponemos nombre al sistema:
System hostname (short form, e.g. 'foo'): shunashi
Configuramos la red (aquí el ejemplo que viene en la guía de instalación de OpenBSD, porque no guardé la configuración que hice en el server en que estaba trabajando), en este ejemplo se tienen 2 tarjetas de red, una se configurará con IP fija y otra con DHCP, sin tener IPv6 y :
Configure the network? [yes] Enter Available interfaces are: fxp0 xl0. Which one do you wish to initialize? (or 'done') [fxp0] xl0 Symbolic (host) name for xl0? [puffy] Enter The media options for xl0 are currently media: Ethernet autoselect (100baseTX full-duplex) Do you want to change the media options? [no] Enter IPv4 address for xl0? (or 'dhcp') 192.168.1.254 Netmask? [255.255.255.0] Enter IPv6 address for xl0? (or 'rtsol' or 'none') [none] Enter Available interfaces are: fxp0. Which one do you wish to initialize? (or 'done') [fxp0] Enter Symbolic (host) name for fxp0? [puffy] Enter The media options for fxp0 are currently media: Ethernet autoselect (10baseT half-duplex) Do you want to change the media options? [no] Enter IPv4 address for fxp0? (or 'none' or 'dhcp') dhcp Issuing hostname-associated DHCP request for fxp0. DHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 1 DHCPOFFER from 73.34.136.1 DHCPREQUEST on fxp0 to 255.255.255.255 port 67 DHCPACK from 73.34.136.1 bound to 69.241.244.76 -- renewal in 1800 seconds. IPv6 address for fxp0? (or 'rtsol' or 'none') [none] Enter No more interfaces to initialize. DNS domain name? (e.g. 'bar.com') [my.domain] example.com DNS nameserver? (IP address or 'none') [68.87.77.130 68.87.72.130] Enter Use the nameserver now? [yes] Enter Default route? (IP address, 'dhcp' or 'none') [dhcp] Enter Edit hosts with ed? [no] Enter Do you want to do any manual network configuration? [no] Enter
Le escribimos el password para root.
Password for root account? (will not echo) pasguor
Password for root account? (again) pasguor
Elegimos el medio de instalación:
Location of sets? (cd disk ftp http or 'done') [cd] (Presionamos enter)
Available CD-ROMs are: cd0.
Which one contains the install media? (or 'done') [cd0] (Presionamos enter, o elegimos el lector donde tengamos la instalación)
Pathname to the sets? (or 'done') [4.3/i386] (Presionamos enter)
[X] bsd
[X] bsd.rd
[ ] bsd.mp
[X] base43.tgz
[X] etc43.tgz
[X] misc43.tgz
[X] comp43.tgz
[X] man43.tgz
[X] game43.tgz
[ ] xbase43.tgz
[ ] xetc43.tgz
[ ] xshare43.tgz
[ ] xfont43.tgz
[ ] xserv43.tgz
Set name? (or 'done') [bsd.mp] (En mi caso presioné done, porque no necesitaba modo gráfico, en caso de necesitarlo hay que marcas todo lo que es para el modo X, y se marcaría el bsd.mp si es un sistema multiprocesador).
Preguntará si está listo para instalar.
Ready to install sets? [yes] (Enter)
Preguntará de nuevo la localización de los conjuntos de archivos para instalación, ahí nada más presionamos enter, porque ya los instalamos.
Location of sets? (cd disk ftp http or 'done') [done]
Ahora elegimos que se levante el demonio para el ssh, en este caso para poder administrarlo remotamente:
Start sshd(8) by default? [yes] y
No se pondrá un servidor NTP.
NTP server? (or 'none' or 'default') [none] (Enter)
Y tampoco correr el modo X.
Do you expect to run the X Window System? [no] (Enter en mi caso)
Tampoco cambiaremos la consola por default.
Change the default console to com0? [no] (Enter)
Finalmente elegimos la zona horaria. En mi caso sería México/
Saving configuration files......done. Generating initial host.random file ......done. What timezone are you in? ('?' for list) [Canada/Mountain] ? Africa/ Chile/ GB-Eire Israel NZ-CHAT UCT America/ Cuba GMT Jamaica Navajo US/ Antarctica/ EET GMT+0 Japan PRC UTC Arctic/ EST GMT-0 Kwajalein PST8PDT Universal Asia/ EST5EDT GMT0 Libya Pacific/ W-SU Atlantic/ Egypt Greenwich MET Poland WET Australia/ Eire HST MST Portugal Zulu Brazil/ Etc/ Hongkong MST7MDT ROC posix/ CET Europe/ Iceland Mexico/ ROK posixrules CST6CDT Factory Indian/ Mideast/ Singapore right/ Canada/ GB Iran NZ Turkey zone.tab What timezone are you in? ('?' for list) [Canada/Mountain] Mexico Select a sub-timezone of 'US' ('?' for list): General Setting local timezone to 'Mexico/General'...done.
Algunas cuestiones después de instalar:
Algunas cuestiones que recomiendan al presionar # man afterboot
Lo primero podría ser limitar el acceso de root de forma remota. Al archivo /etc/ssh/sshd_config en la línea PermitRootLogin se pone "no".
Otra cosa que se debería hacer es solucionar las erratas con el código actual del kernel. Para eso primero se obtiene la versión "current" del kernel.
# cd /usr
# export CVSROOT=anoncvs@anoncvs1.ca.openbsd.org:/cvs
# cvs -d$CVSROOT checkout -P src
Esto tardará un buen tiempo según tu conexión. La ventaja es que después simplemente se tendrá que actualizar de la siguiente forma:
# cd /usr/src
# export CVSROOT=anoncvs@anoncvs1.ca.openbsd.org:/cvs
# cvs -d$CVSROOT up -Pd
(Para quien maneje subversion esto será fácil de entender). Compilamos
# cd /usr/src/sys/arch/i386/conf
# config GENERIC
# cd ../compile/GENERIC
# make clean && make depend && make
...
# make install
Damos privilegios a un usuario
Sabemos que no es muy recomendable estar siempre logueado como el usuario root para realizar labores de mantenimiento, vamos a darle permisos a un usuario para que pueda tener privilegios con sudo.
# visudo
abajo de root, agregamos
thot ALL=(ALL) SETENV: ALL
Con eso le damos los permisos que tiene root, al usuario thot
Instalar Ports
Para poder instalar los ports de OpenBSD (que no son más que programas en su formato binario), primero tenemos que agregar la fuente de donde la tomaremos:
$ export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.3/packages/`machine -a`/
Esto podemos agregarlo al archivo ~/.profile para que cada vez que se inicie sesión esté disponible.
Instalamos las aplicaciones con las pkg* tools.
Por ejemplo:
$ sudo pkg_add -i dmidecode
(una herramienta para mostrar de forma "legible para humanos" información sobre el hardware).
Espero en un futuro poner un ejemplo de la configuración de Packet Filter, y Squid.
Permalink: http://www.mononeurona.org/users/entry/thot/1515
Introducción a los JSF's (II)
Programacion
(Esta es un continuación de este tutorial)
2. Empezando a trabajar con el proyecto
Antes de empezar con el proyecto existen 2 archivos importantes que se crean automáticamente con el proyecto, el web.xml y el faces-config.xml (este nombre se podía cambiar al momento de crear el proyecto), los cuales se pueden encontrar fácilmente en la ventana "Projects" en "Configuration Files".
web.xml - Contendrá información sobre como se filtrarán los jsp, cómo se mapearán las direcciones de los mismos, el tiempo de sesión, etc.
faces-config.xml - Contendrá información como las reglas de navegación, los controladores que se utilizarán, la inyección de datos a los controladores, el alcance de los datos, etc.
Empecemos creando un nuevo jsp, para mostrar un pequeño formulario de registro. Trataré de dar los pasos lo más explícito que pueda pero sin caer en la exageración (la retroalimentación sería muy útil).
Clic derecho sobre el proyecto (Mononeurona) -> New -> JSP, el nombre del archivo será "registro.jsp" (el .jsp no será necesario escribirlo). Debe elegirse JSP con syntaxis estándar (lo cual se encuentra por defecto seleccionado). Después clic en Finish. Con eso tendremos un JSP creado y abierto en el editor.
Para empezar a agregar características de JSF, tendremos que agregar los "taglibs" que utilizaremos. Para esto simplemente agregamos este código al principio del archivo.
![]()
Ahora ponemos las siguientes etiquetas dentro del cuerpo de HTML (body). El "h:form", "h:inputtext" y "commandbutton" se puede agregar utilizando simplemente la paleta (Ctrl+Shift+8) y arrastrando los componentes hacia el editor. Pero no es estrictamente necesario.

Con eso ya tenemos creados nuestro formulario creado. Los h:inputText, y los h:commandButton son elementos que vienen en los taglib que hemos definido con anterioridad así como el "f:view", el prefijo que se especificó al inicio es el que se utiliza aquí.
Ahora vamos a crear una pantalla de "registro completado", será un JSP y se creará de la misma forma que el anterior, en este caso con nombre: finalizado.jsp
Aunque no las vamos a ocupar todavía ponemos los taglibs:
![]()
Y creamos el código html necesario para mostrar la pantalla de registro completado.

Ahora vamos a agregar unas reglas de navegación en el archivo "faces-config.xml", para poder lograr la comunicación entre los 2 jsp que creamos.

Como se puede ver la regla de navegación se podría interpretar como: "De la vista "registro.jsp" cuando se de el caso de que envíe un "submit" se dirigirá a finalizado.jsp"
Ahora se puede ejecutar la aplicación. Simplemente agregue a la dirección /faces/registro.jsp.

Escriba algo en los campos y presione Submit.

Como se puede notar hasta este momento, no hemos agregado código en Java. Eso será en la siguiente parte del tutorial.
Permalink: http://www.mononeurona.org/users/entry/thot/1512
Introducción a los JSF's (I)
Programacion
JSF o Java Server Faces es un framework para aplicaciones web basado en Java que nos facilita la forma en que podemos manejar la vista en nuestros proyectos web. Se podría decir que son una "evolución" de los JSP (Java Server Pages).
Con este tutorial se trata de dar una pequeña introducción de cómo utilizar los JSF's. Cabe mencionar que para eso utilizaremos un patrón MVC. Todo se manejará a través de un controlador para nuestra vista, se tendrá un "bean" para guardar los datos, que además eso nos permitiría unirlo con una capa de persistencia (la capa de persistencia es la que nos permitirá conectarnos a la base de datos y guardar/leer los datos en ella) ya sea por medio de JDBC o Hibernate por ejemplo.
Tratándose simplemente de un especificación los JSF's tienen diferentes implementaciones, una de las más utilizadas es MyFaces de Apache. Para este ejemplo y para no complicar mucho las cosas se utilizará la implementación de JSF's 1.2 que provee Sun directamente con NetBeans, que correremos sobre un servidor Apache Tomcat 6.
Lo que haremos será un formulario de registro para una página. Con algunas validaciones.
1. Creación del proyecto
Para empezar tenemos que crear un nuevo proyecto en NetBeans. (File->New Project)

Elegimos el tipo de proyecto, en este caso sería una aplicación Web.

Le ponemos nombre a la aplicación, para este ejemplo usaré "Mononeurona".

Elegimos el servidor en el que va a correr la aplicación, la versión de Java EE que utilizaremos y la ruta del Contexto (esto último sería la ruta que se verá en el navegador).

Ahora elegimos el framework a utilizar, en este caso será JavaServer Faces y elegimos que las librerías que utilizaremos serán las de JSF 1.2, y con eso finalizamos la creación del proyecto.

Con esto terminamos de crear el proyecto, en la siguiente entrega empezaremos a crear nuestros primeros JSF's.
Permalink: http://www.mononeurona.org/users/entry/thot/1490
Instalando NetBeans 6.1 en Linux
Programacion
NetBeans es un IDE para el desarrollo de proyectos Java y algunos otros lenguajes. Gasta muchos recursos, pero tiene algunas características que facilitan el desarrollo, al igual que Eclipse, otro IDE también muy completo. Posiblemente después agregue algún tutorial para instalar Eclipse. Ahora empecemos con la instalación:
1. Instalar Java (la versión de Sun)
NetBeans puede correr con la versión libre de Java, pero desgraciadamente la mayoría de proyectos que creemos no se ejecutarán o marcarán errores extraños por la falta de la versión de Sun.
En un distribución Debian (o basada en Debian), se deben agregar que tome la sección non-free de los repositorios. Y le damos un:
# aptitude update
# aptitude install sun-java6-jdk
En cualquier otra distribución si lo tienen en sus repositorios puede instalarla de ahí. En caso de que no sea así, pueden bajar el instalador de la página de Sun.
2. Configurar el uso de la máquina virtual de Java.
Normalmente el "runtime" de Java en Linux, está configurado para que utilice la implementación libre de Java. Para cambiarlo por la implementación de Sun hacemos lo siguiente:
# update-alternatives --config java
Hay 4 alternativas que proveen `java'.
Selección Alternativa
-----------------------------------------------
* 1 /usr/lib/jvm/java-6-sun/jre/bin/java
+ 2 /usr/lib/jvm/java-gcj/jre/bin/java
3 /usr/bin/gij-4.2
4 /usr/bin/gij-4.3
Pulse para mantener el valor por omisión [*] o pulse un número de selección:
Se elige la implementación de Java de Sun, para usarla por omisión.
3. Instalar NetBeans.
Primero tenemos que descargar el NetBeans de la página de Sun. Pueden bajar la versión de NetBeans según lo que vayan a programar, para el siguiente tutorial que espero poner en esta página sería conveniente descargar la versión de Web & JavaEE, y lo más fácil aunque sea más pesada es descargar la versión que trae todo.
Ya cuando se tenga descargado el archivo. Como superusuario (para que quede disponible para todos los usuarios del equipo) ejecutamos el archivo.
# sh netbeans-6.1-ml-linux.sh
Configuring the installer...
Searching for JVM on the system...
Extracting installation data...
Running the installer wizard...
Aparecerá un asistente para la instalación de NetBeans.


Ahora se elige la ruta de instalación. Esto es importante porque en caso de que no cree un acceso en su escritorio, podrán obtener el ejecutable dentro de esta ruta.

A continuación se configurarán los puertos que manejará el servidor GlassFish.

Después mostrará una pantalla con la información final sobre la instalación.

Al darle clic en el botón "Install" simplemente es cosa de esperar a que se termine de instalar todo lo necesario:


Donde {$RUTANETBEANS} es la ruta que se eligió durante la instalación.
Permalink: http://www.mononeurona.org/users/entry/thot/1483
Instalación Rápida de Karamelo
Programacion
Instalación de Paquetes
Lo primero que necesitamos es instalar todos los paquetes que ocuparemos:
Para cualquier distribución basada en Debian, usamos aptitude o apt-get:
# aptitude install postgresql php5 php5-pgsql subversion cakephp-instaweb
o en su defecto : $ sudo aptitude install postgresql php5 php5-pgsql subversion cakephp-instaweb
Si usan alguna distribución diferente, simplemente usen la forma de instalar propia de la distro (yum, emerge, etc.), o compilen si gustan.
Creamos nuestro directorio de trabajo:
Lo crearemos en nuestro $HOME y se llamará "devel"$ mkdir $HOME/devel && cd $HOME/devel
(Por si alguien no lo sabe, el && es para que si se ejecuta satisfactoriamente el primer comando, ejecute el segundo).
Descargar CakePHP y Karamelo
Descargamos el código fuente de CakePHP, y lo ponemos en un directorio llamado karamelo. (Recordar que ya estamos en el directorio $HOME/devel]).
$ svn co https://svn.cakephp.org/repo/branches/1.2.x.x/cake/ karamelo
Un paso intermedio que muchas veces no es necesario. En caso de que su descarga del repositorio de CakePHP tuviera un directorio app dentro. Tienen que borrarlo:
$ rm karamelo/app -Rf
Descargamos la nueva versión de Karamelo y lo ponemos en el directorio de aplicación del Cake que descargamos anteriormente.
$ svn co https://devel.mononeurona.org/repos/karamelo/trunk/app karamelo/app
Con esto simples pasos ya tenemos la versión actual de CakePHP y la versión en desarrollo de Karamelo en nuestra computadora. Ahora falta algo importante configurar la BD.
Configuración de la BD
Como superusario, cambiarse al usuario postgres. De cualquiera de estas 2 formas.
$ su root
# su postgres
O en su caso:
$ sudo su postgres
Creamos un nuevo usuario para manejar la base de datos de karamelo.
postgres$ createuser karamelo -P
Pedirá la contraseña 2 veces, la cual será "karamelo" (sin las comillas). También pedirá los privilegios que se brindarán al usuario. Le pueden poner que "sí" a ser superusuario, en caso que así lo deseen. No afectará para este ejemplo.
¿Será el nuevo rol un superusuario? (s/n) n
¿Debe permitírsele al rol la creación de bases de datos? (s/n) n
¿Debe permitírsele al rol la creación de otros roles? (s/n) n
Creamos la base de datos:
postgres$ createdb -E UNICODE KARAMELODB -O karamelo -W
Pedirá una contraseña, la cuál es "karamelo". Si se le quita la -W no pedirá contraseña y no debería afectar en nada.
Nos salimos del usuario postgres, y del usuario root. (con exit)
Creación de las tablas y configuración de la aplicación
Ahora creamos las tablas necesarias para la BD.
Nos cambimos de directorio:
$ cd $HOME/devel/karamelo/app/config/sql/postgresql
Ejecutamos el script para la creación de todas las tablas:
$ psql KARAMELODB -h localhost -U karamelo -W < karamelo.sql
La contraseña que pedirá será "karamelo"
Editamos el archivo de configuración (con el editor que gusten vi, emacs, nano, gedit, etc):
$HOME/devel/karamelo/app/config/database.php.default y lo guardamos en el mismo directorio como database.php. Y dejamos el arreglo $default, como sigue:
public $default = array(
'driver' => 'postgres',
'persistent' => false,
'host' => 'localhost',
'port' => 5432,
'login' => 'karamelo',
'password' => 'karamelo',
'database' => 'KARAMELODB',
'schema' => 'public',
'prefix' => '',
'encoding' => 'UTF-8'
);
Nos cambiamos de directorio:
$ cd $HOME/devel/karamelo
$ cakephp-instaweb
Entramos a un navegador a la siguiente dirección: http://localhost:3000
Listo!!!!

Ahora nada más loguearse como:
Login: john@site.edu
Password: karamelo
Nota muy importante:
Esto únicamente la tendría que hacer una sola vez para probar Karamelo. Para actualizar la versión de Karamelo. Simplemente tendrían que hacer lo siguiente:$ cd $HOME/devel/karamelo/app
$ svn update
Y con eso tendrán la versión más actual (en desarrollo) de karamelo.
De nuevo ejecutan:
$ cd $HOME/devel/karamelo && cakephp-instaweb
Y lo tendrán en la dirección: http://localhost:3000
¡Reportar bugs ayuda al desarrollo, no se olviden de hacerlo!
Permalink: http://www.mononeurona.org/users/entry/thot/1479










