Derechos del Programador

Wednesday 19 de March de 2008

El blog de Jeff Atwood, Coding Horror, es uno de los mejores blog de programación que conozco. Excepto por posts bastante específicos, todo lo que vi escrito ahí es excelente para todos los programadores, independientemente de lenguajes, edades, o lo que sea.

Uno de los posts que encontré hace poco nos da los derechos básicos de todos los programadores:

  1. Todo programador debe tener dos monitores.
  2. Todo programador debe tener una PC rápida.
  3. Todo programador debe tener un teclado y un mouse de su elección.
  4. Todo programador debe tener una silla cómoda.
  5. Todo programador debe tener una conexión rápida a internet.
  6. Todo programador debe tener condiciones silenciosas de trabajo.

Cuando empecé no tenía nada de eso, y poco a poco fuí consiguiendo cada parte por separado. Sigo sin la silla cómoda (no es incómoda, pero tampoco es lindo pasar las 8 horas sentados en ella) ni un teclado y mouse que haya elegido por sus virtudes y no su precio, y hace unos meses que sigo sin tener mi segundo monitor… Pero es innegable que, una vez que tuve alguna de estas cosas, no puedo imaginarme trabajar sin ella.

Cómo no manejar un proyecto

Friday 14 de March de 2008

No trabajé en suficientes proyectos grupales como para decir que estoy trabajando en uno de los peores, pero sí es el peor en el que trabajé.

A lo mejor, como en la mayoría de lo que hice tenía control absoluto, soy demasiado perfeccionista, pero igual, voy a apuntar al “no digo que tenga la razón, pero sé que no me equivoco tanto”:

No sé que tanta libertad tengo para discutir el proyecto, pero no firmé nada que me lo prohiba, así que no me pueden decir nada; pero no sé de la gente encima mio, así que me ahorro detalles.

La cosa es que, un día, mi hermano me dice “Me dieron un proyecto en PHP que hay que arreglar, y paga bien”. Sospechoso por la descripción, pregunté qué había que hacer. La respuesta fue una clara de indicación “no toques esto”: “Hay que pasarlo a ASP.Net”. “No sé ASP.” “Es fácil.” “Y… hacelo vos.” “A vos te gusta programar.” “No sé ASP.” “Es fácil.” (ad nauseam)

“Está bien, pasame el PHP, lo voy a mirar.”

Abro el primer archivo y… No es tan feo, hay un par de queries que se pueden simplificar con joins, pero dentro de todo está bien. Abro el segundo y… ¡OH POR MORADIN, ALGUIEN ARRÁNQUEME LOS OJOS!

“No lo voy a hacer.” “Ya lo acepté.” “Lástima.”

No se quien se termino comiendo esa parte… pero siento lástima por él/ella.

La cosa es que en algún momento a mi me cae la segunda parte. Me dijeron que era la misma empresa que pedía los cambios, y sólo oir su nombre me causó escalofríos. Sabía que iba a ser horrible. Me negué por un mes seguido. Sabía que era imposible, pero por cuatro frentes me atacaron y forzaron hasta que me quebré y acepté.

Ahí empezó la pesadilla.

El sistema se suponía que manejaba contratos, facturas, y que se yo; no se a quien le dieron el proyecto, pero supongo que había que hacer más cambios que lo que me dijeron a mi que haga, y sólo me mandaron lo que tenía que cambiar. Uno de los pocos que tenía idea de cómo se hacen las cosas…

No es demasiado dificil, si uno tiene las cosas bien hechas… y con una estructura de datos apropiada, el código prácticamente se escribe sólo… ahora, con una DB que ni siquiera está en primera forma normal, se vuelve difícil hacer hasta lo más simple.

Y eso no es lo peor…

  • Todas las columnas son obligatorias; pero menos de la mitad es significativa, el resto se llena con valores en blanco.
  • Hay una tabla Documentos, y otra de Detalles; bastante normal… es medianamente aceptable, siendo que a veces se puede evitar poner 5 tablas distintas con la misma estructura… aunque no sirve cuando todas las estructuras son diferentes.
  • A pesar de que las facturas ocupan un lugar en la tabla Documentos, donde se almacena su total, sus descuentos, y demás, éstos últimos datos se agregan, uno por fila, en otra llamada DocumentosValores.
  • Cada vez que el “Ingeniero” quiere un cambio, manda un documento en un formato diferente (hasta ahora hubieron mails simples, PDFs, Docs, y DOCXs…)
  • Y más…

Y, claro, cada cambio viene acompañado de “Poné X como dice en el mail que te mandé la semana pasada”… La próxima le voy a mandar un link a un diccionario y decirle “Ahí está tu respuesta, simplemente tenés que buscar las palabras y reordenar un poco…”

Ah, y, de paso, yo soy perfeccionista. Quiero que todos los detalles funcionen cuando el proyecto está, pero este mismo “Ingeniero” me dice “Hacelo más o menos, pero rápido”, y después “Ahora que anda, arreglá los detalles… y rápido.” WTF? ASSHOLE…

(Y no, no estoy en posición como para simplemente abandonar el proyecto por la mitad…)

Tengo que matar a alguien…

The dark side beckons me…

Thursday 13 de March de 2008

Su seductor abrazo me acaricia, el llamado de la oscuridad me atrae, el reflejo en su superficie brilla en mi cara y me dice “Instálame, Tordek, me deseas en el interior de Morgan*. Sabes que lo quieres. Hazlo…”

Sé que debo resistir a la tentación, pero la carne es débil. Con un dedo abro la puerta, con una mano dejo al Demonio entrar e infectar mi sistema… Sé que tan pronto se cierre todo habrá terminado y seré una víctima más…

Acabo de instalar Windows, de nuevo, a pesar de librarme de su abrazo por un error. Necesito Wintendo, y me odio por eso.

*Así se llama mi Compu; por Morgan LeFay, la hermana del Rey Arturo.

Me pongo viejo

Saturday 8 de March de 2008

> (incf (getf tordek 'edad))
21

Día negro en el Rol

Tuesday 4 de March de 2008

A nivellos 69 años, esta mañana quedó en 0hpfalleció Gary Gygax, conocido por crear el primer juego de Rol: Dungeons & Dragons.

Un minuto de silencio por el creador del mejor vicio de este planeta.

Te odio, Patricio Cañete.

Sunday 2 de March de 2008

Porque como si no tuviera suficientes cosas para hacer ya, ahora twitteo.

¿Coincidencias?

Thursday 7 de February de 2008

La última edición de mi Webcomic favorito

Son leyes y se aplican a todos por igual, supongo :/.

Edit: Eh, no, ese comic es del 2002, pero es la última noticia del sitio; el úlitmo comic (que también tenía que ver con el tema) es éste.

Edit++: Eh, lo que dijo Manuel…

Conversaciones de Facultad

Tuesday 5 de February de 2008

Gugui: «¡Ja, Tordek, regularicé Matemática Discreta!»

Tordek: «¡Ja, yo la regularicé dos veces!»

Fucking Murphy

Tuesday 5 de February de 2008

Y si… por editar mi tema directamente en la carpeta Default terminé sobreescribiéndolo (aunque no entiendo cómo, si saqué la carpeta wp-content antes de actualizar)…

Vuelvo a WP-Default hasta que pueda volver a hacerlo…

CodeAr

Saturday 8 de December de 2007

Una cantidad excesiva de mis lectores (3, o sea, eso es como el… mucho porciento) dejó comentarios en mi último post que decía alguna boludez sobre mis 21 lectores.

<rant>Por un lado, está groso el hecho de que al estar en CodeAr tenga una cantidad grosa de lectores (115 según su güidyet de Feedburner), pero por otro me da cosa estar en un feed así: Pregúntenle a más de un amigo mío y alguna vez le dije hipócrita (y con toda la razón), pero a la vez me la paso quejándome (al menos en 3 posts) sobre los que ponen mensajes que (creo yo) no tienen nada que ver con el feed.

Sí, es un “feed de desarrolladores” (palabra que realmente no me gusta mucho), así que tiene lo que tengan sus blogs, y no un “feed de desarrollo”, que implicaría que esté directamente relacionado al tema, pero no me gusta mucho que hayan mensajes supercolgados (a mi mismo me remito con el post anterior), o relacionados con cosas que no me interesan mucho que digamos (Second Life), o algunos blogs que están en inglés (que, nuevamente, sí, es un “feed de desarrolladores argentinos”, no necesariamente “para argentinos”…).

Entonces por no querer ser hipócrita, no tengo demasiado espacio para quejarme; pero tampoco por el otro lado (sí, es mi blog personal y se cuelga con la suya, pero no creo que mucho de lo que quiero poner corresponda en el feed).</rant>

Así, mi dilema es simple: hacer mi blog más Tordek, o quedarme en CodeAr.

Espero sus comentarios, qué opinan entre las opciones, y si tengo suficientes suscriptores dispuestos a agregar este humilde blog como entrada aparte, este será el último post mío en CodeAr.

Mi Feed RSS

Saturday 1 de December de 2007

Tengo cerca de 21 suscriptores, según reporta Feedburner.

Se nota que hay gente que quiere llenar espacio en sus agregadores.

Develando Misterios

Saturday 3 de November de 2007

Hoy (bueno, ayer) fue Recia 07, la primera convención de comics/manga/anime en Resistencia, Chaco. Ahí presentamos nuestro Club de Rol: Quimera.

Después de la caída de La Morada de Tiamat, la Asociación de Rol que había acá en Chaco, varios nos quedamos con ganas de más… Malas lenguas se pasan insultando y atacando a las cabezas que, supuestamente, planearon el deceso de la bestia con tal de quedarse con todo lo que había en juego; pero, la verdad, no me importa, ni me interesa, lo que pasó.

Quimera es un Club: No cobramos por la membresía, pero así tampoco damos falsas promesas (Tiamat tenía como meta que todos sus miembros jueguen en alguna mesa, cuando menos del 10% dirigía; algo imposible). El objetivo de Quimera es presentar los juegos a los nuevos, y ayudar a que los que quieren jugar encuentren donde —pero ojo, ayudar no implica que nadie obligue a nadie a meter a alguien en su party—.

Pues, entonces, que sus tiradas sean buenas, amigos. Ojalá que la Quimera viva por siempre.

Tordek, El Enano.

De Programación

Sunday 28 de October de 2007

Si hay algo para lo que sirve Internet (además de mirar porno), es para hablar con gente que sabe de qué habla, o que al menos lo parece.

En todos mis años de investigación aprendí mucho (creo) sobre programación (además de lenguajes). Es imposible listarlo todo, porque hay muchas opiniones contradictoria, pero en la mayoría de los grandes está de acuerdo en algunas cosas:

Hacelo porque te gusta

Programar es mucho de un arte, y como en las artes, lo más importante no es el saber dibujar/pintar/actuar/etc.; eso se aprende. Lo más importante es amar lo que se hace.

Yo podría aprender a usar AutoCAD como un maestro, y toda la teoría sobre ingeniería mecánica (o quizá ni eso porque no soportaría las clases), pero cualquier pieza que haga sería horrible porque no me gustaría hacerlo. Igualmente aquellos que se llaman programadores y diseñadores, y ‘aprenden’ HTML, PHP, Photoshop, y demás, terminan dando resultados pésimos.

Hacelo constantemente

Preguntale a un buen programador qué está haciendo, y seguramente te diga “programar”. Preguntáselo a un dibujante y te dirá “dibujar” (bueno, excepto por el hecho de que le duela la mano de pasarse todo el día… dibujando). Un buen programador siempre está haciendo algo nuevo, o mejorando algo viejo. Y si no está tocando código, estará leyendo sobre código. Si lo hacés porque te gusta, lo hacés constantemente, y no hay mejor forma de aprender que programando.

Asimismo, el programador “de 9 a 5″ sólo mira código cuando está trabajando, y sólo si es completamente necesario.

Lo más simple posible

Irónicamente, esta es una de las reglas más complicadas de explicar. Un programa tiene que ser lo más simple posible, pero no más (Sí, sí, lo parafraseo a Einstein ¿y qué?). C es un lenguaje de programación genial, y me encanta por muchas de sus virtudes; desgraciademente la simplicidad no es una de ellas. Sí, su estructura es reducida (no mínima; para eso está Brainfuck, u otros), pero esa simplicidad en el lenguaje hace que los programas se vuelva complejos. Sirve aprender un lenguaje como Python, que en su simplicidad engañan porque esconden su poder.

Hacer programas tan complejos e indescifrables que para entenderlos hay que hacerlos de nuevo sólo sirve para que consigamos una extensa librería de archivos que juntan bugs, porque cada vez que encontramos y arreglamos uno causamos siete nuevos.

Lo menos posible

Esta regla está extremadamente ligada a sistemas como Unix, con una potente línea de comandos. Los pipes de Unix permiten relacionar la salida de un programa con la entrada de otro, de manera que puedo tener un programa cuya única función sea imprimir en orden la entrada que se le da, así no necesitaría implementar una función de ordenación en cada programa en caso de que la necesite. Simplemente llamo al programa apropiado. Igualmente en un programa lo mejor es utilizar las funciones que ya estén implementadas en el lenguaje, en lugar de crear una nueva cada vez (a menos que las ventajas sean extremas). (Y no, esto no está en desacuerdo con la regla 2, programar constantemente; un programador inteligente hace cosas nuevas, en lugar de resolver problemas viejos.)

Otros sistemas obligan a diseñar monolitos que incluyen todas las funciones posibles en cada programa, simplemente porque es imposible hacer que los programas se comuniquen entre sí.

Otra vez me desperté a las 9 de la noche…

Monday 8 de October de 2007

…y cada vez más me convenzo de que es lo mejor que hay.

Silencio absoluto, excepto por mi música. Ni pajaritos, ni autos, ni nada. Sólo código.

Y, bueno, para que no digan que mis posts son todos colgados, aprovecho para hablar sobre mi pecé.

Sigo sin actualizarle nada desde el post que puse, pero no me molesta… la única razón por la que lo haría es para decir que tengo una máquina más grosa. (Bueno, no me quejaría de actualizar la placa de video; cuando pongo el WoW a 1280×1024 como corresponde en un monitor LCD, los cuadros bajan a 4 por segundo…) El único problema es que “gracias” al PCI-E, SATA, y todo eso*, si quiero cambiar algo, ya tengo que cambiar todo. (* Lectores medianamente atentos pueden encontrar que esa frase es bastante vaga y general. ¿La razón?: de hardware no sé nada.)

Bueno, dije “un monitor LCD”, pero miento: tengo dos. Primero parecerá “¿Para qué 2 si con alt+tab y los escritorios múltiples es más que suficiente?”, pero es infinitamente más cómodo de manejar, en particular cuando uno quiere concentrarse en lo que está haciendo y cada 2 segundos le mandan un mensaje. Poner la ventana en el escritorio de al lado deja más que suficiente lugar para seguir prestando atención a lo que se está haciendo y echarle un vistazo a lo que le dicen.

Igual, a pesar del beneficio, todavía hay algunas cosas que me gustaría tener:

  • Estoy en Linux, y tengo los múltiples escritorios (yo los llamo Main, Code, Chat, y Fun!). Sería espectacular que si yo cambio de escritorio en uno de los monitores, el otro siga en el que estaba. Si abro un Firefox en Main en el primer monitor, un Eclipse en Code en el segundo, me cambio a Chat en el primero, y en el seguno vuelvo a Main, que el Firefox siga ahí.
  • Compiz no anda con múltiples monitores con los drivers de nVidia… ¡quiero mis transparencias!

Y ya que estamos, completo la descripción de mi “área de trabajo”. Los dos monitores están uno al lado del otro, y rodeándolos un par de parlantes conectados a un equipo de música (me rehuso a escuchar música con un par de parlantecitos de 20cm de alto… ugh).

Mi teclado es de lo más común que se pueda encontrar… Excepto por un detalle: es un teclado en inglés. Sí, en inglés. Odio completamente los teclados en español… ¿Alt Gr? ehm… hago mi arroba con shift+2, no “alt gr 2″ (o peor, alt 64). ni hablar de la tecla de <>, que necesito apretar shift para abrir un tag y no para cerrarlo (o viceversa). Ah, y, estadísticamente, la ñ se usa menos que cualquier otra letra acentuada, así que tener á sería más eficiente.

Y, finalmente, mi mouse, que igual que el teclado es lo más común que hay (aunque obvio que óptico).

Bueno, sí, cualquiera… pero… ¿alguien sabe si existe algo como lo que mencioné arriba? Lo de los escritorios.

¿Se puede arreglar el RSS?

Friday 28 de September de 2007

Hace poco leí un artículo en Reddit (y ni me acuedo del link) que decía que el RSS nació para arreglar un problema que nunca existió, y crear otro en su lugar: desperdiciar ancho de banda.

Según dice, demasiado tráfico se desperdicia por el hecho de que, como la Internet es anónima, “Suscribirse” a un RSS NO ES suscribirse a un RSS. Suscribirse quiere decir que alguien te lo manda, pero al RSS se lo pide. (Hay algo para decir con respecto a los “pings” sobre esto, pero no viene al caso.)

Entonces, cada 2 minutos, alguien hace click en su botón de actualizar, y manda varios paquetes a todas las URLs donde está “suscrito”. Cada una procede, entonces, a mandarle sus últimos 10 posts, que, digamos, son de 1kB cada uno. 10kB * 10 posts * 50 URLs * 1000000 de usuarios, y se nota para donde va esto.

En uno de mis momentos de ideas repentinas (estúpidas e inútiles, casi siempre, pero repentinas), pensé: Y… ¿por qué no mandar una simple cadena: un GET del tipo ?latestpost=1190961528. Si no está, bueno, se mandan los 10 posts. No arreglamos nada, pero al menos no rompemos nada. Es compatible con lo que ya existe… ¿Y si está? y si está, simple: $query .= " WHERE date >". date("Y-m-d",$GET['latestpost']);.

Supongamos que ponemos eso en nuestro feed RSS:

Ventajas: ahorrar ancho de banda (asumiendo que alguien lo aplique).

Desventajas potenciales:

  • Seguridad: el date() solo va a morirse si la cadena llega a tener algo más que números… y si no? /[^0-9]/.
  • Tiempo de procesador: dos palabras: Un. If.
  • Retraso en el acceso a la base de datos: Idem: Un. Where.
  • Pedir una fecha demasiado vieja: Uhm… LIMIT?

¿Y del lado de los clientes RSS? Para aplicar, lo único que tienen que guardar es la fecha del último post recibido…

La verdad que esto es tan estúpido que, si no existe ya, guau… y si existe… ¿por qué el problema de “mucho ancho de banda”?

Fantasía y Ciencia Ficción (Septiembre 2007)

Friday 14 de September de 2007

Je, que lindo que es reddit… Por algún motivo, una noticia de que la famosa revista Fantasy & Science Fiction estaba regalando ejemplares a cambio de reviews en blogs se coló por entre miles de geeks y llegó a mi lector RSS. Lo gracioso es que la primera vez que lo vi dije “Bah, ya se habrán terminado”, y, cuando lo leí de nuevo, “No tengo nada que perder”.

Mandé el mail sin esperanzas, pero aún así recibí una pronta respuesta. (Interesantemente, poco tiempo después el post que lo avisaba también reportaba que el último número ya había sido entregado; suerte, supongo…)

La única queja es que me dijeron que me lo mandaban el 17 de julio, y lo tuve en mi escritorio hoy —13 de septiembre— a la mañana, a pesar de que el sobre dice repetidamente “correo aéreo”.

La tapa está muy grosa (y la revista no se queda atrás con 160 páginas más-o-menos-A5). El dibujo del alquimista/mercader de la tapa está muy bien hecho. Y, hey, por 4,50 dolares más que vale la pena (estoy considerando suscribirme).

Pero, bueno, como dice que tengo que dar el review sobre –este– tomo, y no la revista en general, me pongo a eso…

Las primeras historias que leí fueron Wrong Number de Alexander Jablokov, que empezó lento pero después me atrapó, y Atalanta (que 9 de cada 10 veces leí “Atlanta”) loses at the interpantheonic trivia bee de Heather Lindsley, que, a pesar de su raro nombre, era genial; la historia que mezclaba las deidades de todo el mundo, una Afrodita cabreada, y un Hipomenes dispuesto a darlo todo… literalmente.

La siguiente fue Requirements for the Mythology Merit Badge, de Kevin N. Haw, que en solo 9 puntos desconectados logra tirar indirectas confusas que lo pierden a uno, hasta que de repente todo cierra, aunque uno no se decide si alzar una ceja o tirarse al piso riendo. Im-per-di-ble.

El artículo de Ciencia me dio por los huevos… Snowcrash + Second Life lo resume.

Si hago una review de las columnas “Books” y “Books to look for” va a terminar siendo una metareview… pero bueno… se ven lindas, completas, y cada una con su propio estilo (la primera analiza lo suyo de forma más detallada, a primera vista, y más sobre la trama). También un cuadrito llamado “Coming attractions” nos cuenta qué leeremos en algunos de los números por venir.

No leí la columna de Películas (tengo algo en contra de sentarme por más de una hora mirando una imagen que se mueve, si no puedo interactuar con ella…).

¡Y todavía no termina!

Aún me falta leer uno de los cuentos cortos (que sólo lo tiene de nombre), y dos de las “novelets”.

Si se lo compran, en serio, no se arrepentirán.

(Y no, esto no es sólo porque me dieron el número gratis; en serio está muy buena.)

Ah, y para los que digan “esto no tiene nada que ver con programacion/informatica/cuando vas a seguir el “curso” de programacion/deja de escribir/conseguite una vida (aunque esa es mi frase)”, bueno, es MI blog. Si no les gusta, hagan un post en el suyo (pero asegúrense de linkearme).

Experiencia W

Wednesday 5 de September de 2007

Bueno, ahora me conseguí un disco nuevo, lo particioné, y le puse Windows XP.

Luego de la instalación del sistema, no tenía sonido, así que instalé los drivers de audio, los de la placa madre, y los de la placa de video. Me bajé Firefox, Foobar, y iTunes para probar daap (que en Amarok anda, pero no es «uh, que bien anda»). Por último, el AVG free.

Mientras bajaban las actualizaciones de Windows, me puse a jugar al Trackmania Nations. Después de un rato me aburrí, y miré cuanto faltaba para que terminen las actualizaciones. Al notar que ya estaban listas, reinicié.

Al volver, me puse a navegar un rato, me bajé el MSN Messenger y— ups, resetear de nuevo.

Vuelvo, veo cómo hago para instalar el Visual Studio, y veo que trae 2 ISO. No me quejo —salió gratis—, pero cuando me pongo a buscar un programa para montarlo, es nuevamente hora de reiniciar.

A la tercera, me bajé el GetRight, porque algunas cosas se toman la vida en bajar, y si se cortan, Firefox empieza desde 0. Windows activado, WGA me dice que es de verdad, me pongo contento, y al ver el cartelito una vez más, apago la máquina hasta que se instala todo lo que falta. Antes de reiniciar ya había borrado el GetRight, porque tenía ya demasiada publicidad.

Este proceso repetitivo de entrar y salir duró cerca de 15 repeticiones. Windows en total instaló cerca de 80 actualizaciones. En el panel de control me puse a ver qué hacían, y noté algunas cosas particularmente molestas: muchas de las actualizaciones eran “Actualización acumulativa para X”, o “Nueva versión de Y”… si son actualizaciones acumulativas, y el sistema es capaz de identificar qué tengo instalado en la máquina, ¿por qué no puede simplemente bajarse un parche de mi versión a la última?… Ni hablar de las 5 versiones de Windows Media Player.

Al finalizar todo, tengo ocupados casi 7 gigas de la partición de 40. Con la instalación recién hecha, tenía 4. Viendo que lo que yo bajé no pudo haber ocupado más de 500 megas (todavía no instalo el Visual Studio), me bajé 2,5 GB de actualizaciones de Windows.

A pesar de que sigo con la queja de que ¿por qué no puede hacer Un Gran Parche?, no me quejo demasiado porque las actualizaciones posteriores no aparecerán todas juntas.

Ah, todo esto lo hice probando lo que recomiendo a todo el mundo: me creé mi propia cuenta de usuario Limitada, y otra de Administrador. Instalar cosas no es molesto, simplemente un click derecho, “Ejecutar como…”, y poner la contraseña de algún admin.

Supongo que es soportable…

T out.

Edit: ¿Alguien sabe cómo hago para desinstalar el WMP, Windows Movie Maker, y otras de esas cosas que no uso?

Básicos PHPianos

Thursday 16 de August de 2007

Tehsis dijo algo que ahora es más que obvio: estoy explicando las constantes y variables y demás en PHP… pero si se supone que el que lee esto quiere aprender PHP, no está por saber cómo ejecutar ese código…

Para ejecutar código PHP, primero hay que tener un intérprete a mano. Hay varias formas de hacerlo: Instalar sólo el ejecutable (poco recomendable para no-linuxeros), instalar el ejecutable con algún servidor web (IIS, Apache, el que más le guste a cada uno), o conseguirse un hosting que provea PHP.

Los que opten por el primer camino suelen saber cómo hacerlo solos, así que los dejo (para probar uno de sus scripts, ejecutan php < script.php). Para los que elijan el segundo, tienen amplia documentación en el sitio de PHP. Y para los últimos, a usar Google.

PHP es un lenguaje que se “embebe” en el código HTML; se lo entremezcla con el contenido estático, cosa de no tener que poner un echo adelante de cada línea.

El intérprete simplemente imprime todo el contenido que entra, hasta que encuentra uno de los símbolos de apertura. por lo general es la secuencia <?php, aunque en algunos casos basta con <?. Luego, procesa toda la entrada hasta llegar a un ?>. Entonces, un archivo test.php que contenga:

echo "hola";
&lt; ?php
echo "ejecutable";
?&gt;

Daría como salida:

echo "hola";
ejecutable

(Aunque, dado que en HTML cualquier fin de línea, espacio, tabulación, etc., se reemplaza por un espacio (independientemente de la cantidad de espacios que haya), en un navegador se vería ‘echo “hola”; ejecutable’, todo en una misma línea.)

Comienzo de clases

Monday 13 de August de 2007

Dado que hace casi un mes que puse la currícula, y no hubieron cambios, así que empiezo:

Una variable es un contenedor que almacena un valor. Una constante también. La diferencia radica, como indican sus nombres, en que el valor que guarda una variable puede cambiar en el transcurso de un programa, mientras que el de una constante se determina en un momento, y permanece igual hasta que éste se termina.

El ejemplo típico de constante es pi.

En algunos lenguajes, como en C, es necesario declarar una variable antes de poder utilizarla. En otros, como en PHP, una variable se declara tan pronto se le otorga un valor.

Variables:

$valor=1;

Constantes:

define("PI",3.14159);

Al principio puede parecer inútil una constante, después de todo se la puede reemplazar por una variable, pero con el tiempo se aprende que sí son útiles: si un valor se usa repetidamente en varios lugares diferentes, es bueno definirlo como una constante para evitar errores, o por si luego queremos cambiar su valor… en el primer caso, si en algún lugar escribimos 31.4159, el valor final estará mal. En el segundo, si queremos cambiar la precisión de PI de 3.14159 a un valor con 15 decimales, simplemente cambiamos el valor de la constante, y no en todos los lugares donde lo usemos (ejemplo: podemos calcular el área y perímetro de un círculo, y el volumen y superficie de una esfera, a partir de un radio, y todos éstos cálculos involucran a PI).

La asignación, simplemente, es el hecho de poner un valor en una variable. Se hace con el operador =. El valor asignado puede ser un literal (5, “Tordek”, 3.14159…), o el resultado de una operación (matemática, la aplicación de una función, una operación sobre cadenas, o alguna combinación de esto):

$a = 5;
$nombre = "Tordek";
$cuadrado = 4 * 4;
$saludo = "Hola, " . $nombre;

Para ver el valor de una variable (o el resultado de una operación), llamamos a echo.

Si no tuviéramos variables ni constantes, para imprimir los 4 valores que dije antes (perímerto y área de un círculo, y superficie y volumen de una esfera), deberíamos escribir algo así (para un radio 10):

(Nota: el punto es un operador de concatenación, es decir, “a”.”b”=”ab”. Cuando veamos cadenas lo explicaré más profundamente.)

echo "Perimetro: ". 2 * 3.14159 * 10;
echo "Superficie: ". 3.14159 * 10 * 10;
echo "Area: ". 4 * 3.14159 * 10 * 10;
echo "Volumen: ". 4/3 * 3.14159 * 10 * 10 * 10;

Si ahora hacemos que PI sea una constante, se ve todo más limpio:

define("PI", 3.14159);
echo "Perimetro: ".2 * PI * 10;
echo "Superficie: ". PI * 10 * 10;
echo "Area: ". 4 * PI * 10 * 10;
echo "Volumen: ". 4/3 * PI * 10 * 10 * 10;

Ahora, podemos poner el valor del radio en una variable, y si lo queremos cambiar, sólo tocamos un lugar:

define("PI", 3.14159);
$r=10;
echo "Perimetro: ".2 * PI * r;
echo "Superficie: ". PI * r * r;
echo "Area: ". 4 * PI *  r * r;
echo "Volumen: ". 4/3 * PI *  r *  r * r

Pero se sigue viendo algo apretado… podríamos hacer todos los cálculos primero, e imprimirlos después:

define("PI", 3.14159);
$r=10;
 
$perimetro = 2 * PI * r;
$superficie =  PI *  r * r;
$area = 4 * PI *  r * r;
$volumen = 4/3 * PI *  r *  r * r;
 
echo "Perimetro: ". $perimetro;
echo "Superficie: ". $superficie;
echo "Area: ". $area;
echo "Volumen: ". $volumen;

Sí, ahora es un poco más amplio, pero es discutiblemente más legible. Algún matemático en la audiencia puede notar que la operación PI * r se repite siempre, así que podría almacenar su valor en una constante, y reemplazarlo donde se lo necesite… pero esto termina haciendo que el código sea más difícil de leer (y feo), y lo que ganamos en velocidad en ahorrarnos tres multiplicaciones (se usa 4 veces, y se calcula 1) es tan minúsculo que es despreciable. Siempre se tiene que intentar que lo que se escribe sea fácil de entender, y por las variables se empieza.

Contagio

Monday 6 de August de 2007

Porque tenía ganas de poner un meme.

Y porque se ganó el link cuando me hizo reirme con ésta entrada de su blog superlacónico.

Y porque tenía ganas.

Et al…

Juguemos al contagio:

  1. Poné una entrada en tu blog invitando a jugar, y un comentario con un link a ella en el blog en que lo leíste.

Sí, bueno, es un solo paso.

Vive la Récursivité!