jueves, 15 de diciembre de 2011

[Aporte] Tutoriales Javascript para Unity

Conceptos previos

Clases:Yo las definiria como conjunto de funciones, osea que contiene varias funciones que podemos usar cuando queramos, explicare mas adelante

Antes que nada explicare el como crear un script(para los que no saben).

En la pestaña project le damos un clic al boton create

nos saldra este menu y seleccionamos javascript

nos creara un archivo y le pondremos el nombre que queramos,al abrirlo saldra esto(si instalaron el editor de texto que les recomende el tutorial pasado)

nos saldran escritas estas 2 lineas pero que detallare ahora

Funciones

Estructura de una funcion


function Start(parametro){
}



  • *Lo primero siempre debe ser la palabra "function" para declararla
  • *"{" y "}" al inicio y al final. Todo lo que esta dentro de estos corchetes es la funcion


Ejemplo

 
function ImprimirMensaje() {
 var mensaje : string = "Daniel127";
 Debug.Log(mensaje);
}
function Start() {
 ImprimirMensaje();
}
 


Pongamoslo a prueba

arrastra el script a a camara y dale play abajo en la esquina deberia salir algo como esto

si le damos doble clic la consola abrira una nueva ventana


La consola nos avisara de los errores que pueda tener un script al ser compilado,los errores nos los escribira en rojo como este

en este caso el error es que no reconoce el tipo de variable ya ue esta escrito "string" enves de "String"(la s mayuscula), por lo cual entro a otro pequeño detalle que es un error comun.
En programacion las palabras se deben escribir exactamente como se llaman
Ej: si creara una funcion llamada ImprimirMensaje, tambien puedo crear otra llamada Imprimirmensaje son 2 funciones diferentes asi sea por una "m" y/o "M",espero haberme hecho entender.Lo mismo pasa con las palabras "clave"(o reservadas) de cada lenguaje(en este caso el tipo de variable), debe ser escrito correctamente para que al compilar no de error

Explicación

Ahora si explicare el codigo XD

Lo primero fue crear la funcion "ImprimirMensaje" la cual imprime un mensaje al registro de la consola del unity usando la funcion reservada "Debug.Log" despues se llama a la funcion "ImprimirMensaje" desde la funcion "Start()"

Debug.Log lo compone una clase y una funcion que lo que hace es depurar(podriamos decir que es como comprobar si una parte de codigo funciona, o almenos pa eso la uso yo XD), en este caso la clase es Debug y la funcion es Log.
Como dije al principio las clases contienen varias funciones en este caso Debug contiene estas

si usan el editor de texto que les recomende ahora comprenderan lo que es el autocompletar, lo que hace es que al detectar la clase nos ofrecera una lista de las funciones que contiene lo que facilita a la hora de escribir el codigo ya que nos evitaria escribir todo el nombre de la funcion; ademas este editor nos ofrece una explicacion de lo que hace cada funcion con el simple hecho de mantener seleccionada la funcion unos segundos(nos da una explicacion en ingles XD, pero es entendible).
Ahora la funcion Log,al llamarla entre el parentesis se debe escribir los parametros o datos que requiera la funcion(esto lo explicare con mas detalle en otro momento), en este caso introducimos la variable "mensaje" que era de tipo String por lo cual la consola nos muestra texto, tambien podriamos poner numeros y no nos daria ningun error; sin embargo hay funciones que requieren que solamente introduscamos numeros como por ej

 
var a = transform.position;
var b = enemigo.position;
Vector3.Distance(a,b);
 


este codigo no es que funcione con solo esas 3 lineas XD solamente es un ejemplo, Vector3.Distance lo que hace es calcular la distancia que hay entre 2 puntos, en este caso a y b que son 2 variables que contienen las posiciones de 2 objetos, por lo que los parametros que pide son 2 que son separados por "," y en este caso no aceptara texto.

Unity tiene varias funciones reservadas, las 2 mas importantes(aunque hay mas) son:

  1. Start():Se ejecuta una ves se llama al script
  2. Update():Se ejecuta continuamente en cada frame(me imagino que ya conoceran que es esto XD)


Estas funciones son mas importantes por que son como las "principales"(despues hare una lista de cuales son todas las "principales"), ya que todo script debe tener por lo menos una de estas para funcionar, ya que todo lo que este dentro de ellas es lo que se ejecutara en el juego, si no entiendes bien al ejemplo quitale la funcion start y dale play y veras que no sucede nada, y cambiala por update y mira la consola y veras como aparecen mas mensajes, por esto es necesario aprender en que momento se debe usar tal funcion conociendo lo que hace cada una(como dije antes luego hare una lista)

Creo que aqui acaba este tuto,si tienes dudas no olvides en preguntar
talves aga un tema mas de funciones para explicar mejor lo de parametros y mostrar
el uso de las funciones "principales"

Como ser un hacker? (dedicado a novatos especialmente).

En este tema explicare como puedes ser una hacker, tomad tiempo porque es largo. Y incluye consejos muy utiles para ser hacker.

¿Qué es un hacker?

El Jargon File contiene un montón de definiciones del termino "hacker", la mayoría basadas en la afición a lo técnico y en el placer de resolver problemas sobrepasando los límites. Si deseas saber cómo convertirte en un hacker, bien, solo 2 puntos son realmente relevantes.

Existe una comunidad, una cultura compartida, de programadores expertos y magos de las redes, cuya historia se remonta décadas atrás a los tiempos de los primeros miniordenadores de tiempo compartido y los tempranos experimentos con ARPAnet. Los miembros de esta cultura crearon el término "hacker". Los hackers construyeron Internet. Los hackers hicieron de Unix el sistema operativo que es hoy día. Los hackers hacen andar Usenet. Los hackers hacen funcionar la WWW. Si eres parte de esta cultura, si has contribuido a ella y otras personas saben quién eres y te llaman hacker, entonces eres un hacker.

Los mentalidad hacker no está confinada a esta cultura del software. Hay gente que aplica la actitud de hacker a otras cosas, como la electrónica o la música —de hecho, puedes encontrarla en los más altos niveles de cualquier ciencia o arte. Los hackers de software reconocen estos espíritus emparentados en otras partes y pueden llamarlos "hackers" también— y algunos sostienen que la naturaleza hacker es en realidad independiente del medio particular en el cual el hacker trabaja. Sin embargo, en el resto de este documento nos centraremos en las habilidades y actitudes de los hackers de software, y en las tradiciones de la cultura compartida que originó el término "hacker".

Existe otro grupo de personas que se llaman a sí mismos hackers, pero que no lo son. Son personas (generalmente varones adolescentes) que se divierten irrumpiendo ilegalmente en ordenadores y haciendo "phreaking" en el sistema teléfonico. Los auténticos hackers tienen un nombre para esas personas: "crackers", y no quieren saber nada de ellos. Los auténticos hackers opinan que la mayoría de los crackers son perezosos, irresponsables y no muy brillantes, y fundamentan su crítica en que ser capaz de romper la seguridad no le hace a uno un hacker, de la misma manera que ser capaz de arrancar un coche con un puente en la llave no le convierte en ingeniero de automotores. Desafortunadamente, muchos periodistas y escritores utilizan erróneamente la palabra "hacker" para describir a los crackers; esto causa enorme irritación a los auténticos hackers.

La diferencia básica es esta: los hackers construyen cosas; los crackers las destruyen.

Si quieres ser un hacker, continúa leyendo. Si lo que quieres es ser un cracker, ve directo a leer el alt.2600 y prepárate para soportar la dura realidad cuando descubras que no eres tan listo como crees. Y eso es todo lo que voy a decir de los crackers.
La actitud del hacker

Los hackers resuelven problemas y construyen cosas, y creen en la libertad y la ayuda voluntaria mutua. Para ser aceptado como hacker, deberás comportarte como si tuvieras esta actitud en tu interior. Y para comportarte como si tuvieras esta actitud, deberás creerte de verdad dicha actitud.

Pero si piensas en cultivar las actitudes de hacker solo como una forma de ganar aceptación en esta cultura, te estás equivocando. Transformarse en la clase de persona que cree estas cosas es importante para ti —para ayudarte a aprender y mantenerte motivado. Como en todas las artes creativas, el modo más efectivo de transformarse en un maestro es imitar la mentalidad de los maestros —no sólo intelectualmente, sino también emocionalmente.

O como dice el siguiente poema zen moderno:

Para seguir la trayectoria:
mira al maestro,
sigue al maestro,
camina junto con el maestro,
mira a través del maestro,
conviértete en el maestro.

Así que, si quieres ser un hacker, repite lo que sigue hasta que te creas lo que estás diciendo:
1. El mundo está lleno de problemas fascinantes que esperan ser resueltos

Es muy divertido ser un hacker, pero es la clase de diversión que requiere mucho esfuerzo. El esfuerzo requiere motivación. Los atletas triunfadores obtienen su motivación a partir de un tipo de placer físico que surge de trabajar su cuerpo, al forzarse a sí mismos más allá de sus propios límites físicos. De manera similar, para ser un hacker deberás sentir un estremecimiento de tipo primitivo cuando resuelves problemas, afinas tus habilidades y ejercitas tu inteligencia.

Si no eres la clase de persona que te sientes inclinado hacia estas cosas de forma natural, necesitarás poder experimentarlas para llegar a ser un hacker. De no ser así, encontrarás que tu energía para "hackear" se verá agotada por otras distracciones como el sexo, el dinero o la aprobación social.

(Además deberás desarrollar cierta clase de fe en tu propia capacidad de aprendizaje —la creencia de que, aun cuando puedes no saber todo lo que necesitas para resolver un problema, si tomas una parte de él y aprendes desde allí, aprenderás lo suficiente para resolver la siguiente parte, y así, hasta que lo tengas resuelto por completo.)

2. Ningún problema tendría que resolverse dos veces

Los cerebros creativos son un recurso valioso y limitado. No deben desperdiciarse reinventando la rueda cuando hay tantos y tan fascinantes problemas nuevos esperando por allí.

Para comportarte como un hacker, debes creer que el tiempo para pensar que emplean otros hackers es precioso —tanto, que es casi una obligación moral para ti el compartir la información, resolver los problemas y luego exponer la solución de manera que los otros hackers puedan resolver nuevos problemas, en lugar de enfrentarse perpetuamente con los viejos.

(No tienes que pensar que estás obligado a regalar todo tu producto creativo, aunque aquellos hackers que lo hacen son los que obtienen más respeto por parte de los demás hackers. Es consistente con los valores de un hacker venderse lo suficiente para pagar la comida, el alquiler y los ordenadores. También está bien la utilización de estas habilidades de hacker para sostener a la familia, o incluso hacerse rico, siempre que no olvides la lealtad a tu arte y a tus colegas hackers mientras lo haces.)

3. El aburrimiento y el trabajo rutinario son perniciosos

Los hackers (y las personas creativas en general) nunca debieran ser sometidas a trabajos estupidamente repetitivos, porque cuando esto sucede significa que no están haciendo lo único que son capaces de hacer: resolver nuevos problemas. Este desperdicio de talento daña a todo el mundo. Por ello, las tareas rutinarias, repetitivas y aburridas no sólo son desagradables, sino intrínsecamente perversas.

Para comportarte como un hacker, debes creer en esto lo suficiente como para automatizar las tareas rutinarias todo lo que se pueda, no solamente por ti mismo, sino para beneficio de todos los demás (especialmente otros hackers).

(Existe una aparente excepción a esta regla. Los hackers hacen cosas a veces que pueden parecer repetitivas o aburridas a un observador, pero son un ejercicio para lograr claridad mental o para adquirir cierta habilidad u obtener cierta clase de experiencia que no podría conseguirse de otro modo. Pero esto es una elección —ningún ser pensante debiera nunca ser forzado a una situación que les aburra.)

4. La libertad es buena

Los hackers son antiautoritarios por naturaleza. Cualquiera que pueda darte órdenes, puede obligarte a dejar de resolver ese problema que te está fascinando —y, dada la manera como trabajan las mentes autoritarias, encontrarán alguna razón espantosamente estúpida para hacerlo. Por eso, la actitud autoritaria debe ser combatida donde sea que se la encuentre, pues si se la deja te asfixiará, tanto a ti como a otros hackers.

(Esto no es lo mismo que combatir toda autoridad. Los niños necesitan guía, y los criminales, restricciones. Un hacker puede estar de acuerdo en aceptar algún tipo de autoridad para poder obtener algo que desea más que el tiempo que gasta en seguir órdenes. Pero este es un pacto limitado, consciente; la clase de sumisión que desean los autoritarios no está en oferta.)

Los autoritarios prosperan en la censura y el secreto. Y desconfían de la cooperación voluntaria y del intercambio de información —sólo les agrada la cooperación que tienen bajo su control. Así que, para comportarte como un hacker, deberás desarrollar una hostilidad instintiva hacia la censura, el secreto y la utilización de la fuerza o el fraude para someter a adultos responsables. Y deberás estar preparado para actuar en consencuencia.

5. La actitud no es sustituto para la competencia

Para ser un hacker, deberás desarrollar algunas de esas actitudes. Pero tener solo la actitud no te transformará en hacker, como tampoco te puede transformar en un atleta campeón o en estrella del rock. Para transformarte en hacker necesitarás inteligencia, práctica, dedicación y trabajo duro.

Por lo tanto, debes aprender a desconfiar de la actitud y respetar la competencia en todas sus formas. A ningún hacker le gusta perder el tiempo con quienes adoptan la pose de hacker, sino que veneran la competencia —especialmente la competencia al hackear, pero la competencia en cualquier ámbito está bien. Especialmente buena es la competencia en habilidades exigentes que poca gente domina, y la mejor es la competencia en habilidades exigentes que requieren agudeza mental, destreza y concentración.

Si respetas la competencia, disfrutarás desarrollándola en ti mismo —el trabajo duro y la dedicación se transformarán en una especie de juego intenso, y no una rutina. Esa actitud es vital para transformarse en hacker.
Habilidades básicas para el hacking

La actitud hacker es vital, pero más aún lo son las habilidades. La actitud no es sustituto para la competencia, y existe un cierto conjunto de herramientas básicas que debes dominar antes que cualquier hacker sueñe con llamarse así.

Este conjunto de herramientas cambia lentamente a lo largo del tiempo a medida que la tecnología crea nuevas habilidades y descarta otras por obsoletas. Por ejemplo, se incluía la programación en lenguaje máquina, y no se hablaba de HTML hasta hace poco. Pero hacia finales de 1996, está claro que se debe incluir lo siguiente:
1. Aprende a programar

Esta es, por supuesto, la habilidad fundamental del hacker. Si no conoces ningún lenguaje de programacion, recomiendo empezar con Python. Es limpio, bien documentado, y relativamente fácil para novatos. A pesar de ser un buen primer lenguaje, no es un juguete; es muy poderoso, flexible y se adapta bien a grandes proyectos. He escrito un detallado análisis de Python. Hay disponibles buenos tutoriales en el sitio web de Python.

Java es tambien un buen lenguaje para iniciarse en la programación. Es más difícil que Python, pero produce código más rápido que Python. Creo que es un buen segundo lenguaje para aprender.

Pero no creas que podrás ser un hacker, siquiera un programador, si solo conoces un único lenguaje —debes aprender cómo pensar en los problemas de programación de una manera general, independiente de cualquier lenguaje. Para ser un hacker de verdad, precisas llegar al punto en el cual aprendas un lenguaje nuevo en días, relacionando lo que está en el manual con lo que ya sabe de antes. Esto significa que debes aprender varios lenguajes muy diferentes entre sí.

Si deseas meterte seriamente en programación, tendrás que aprender C, la base de Unix. C++ es muy parecido a C; si conoces uno, aprender el otro no te resultará difícil. Sin embargo, ninguno de ellos es bueno para aprender a programar. Y hoy día, cuanto más puedas evitar programar en C, mas productivo serás.

C es muy eficiente, y trabaja bien con los recursos de las maquinas. Desafortunadamente, C obtiene su eficiencia a base de mucho manejo a bajo nivel de los recursos (como la memoria) a mano. Todo esa programación a bajo nivel es muy compleja y propensa a errores, y tendrás que dedicar gran cantidad de tiempo a la depuración de los programas. Con las máquinas de hoy, tan poderosas, esto ya no es tan necesario —es más inteligente usar un lenguaje que use el tiempo de máquina menos eficientemente, pero en cambio use tu tiempo más eficientemente. O sea, Python.

Otros lenguajes de particular importancia para los hackers son Perl y LISP. Perl vale la pena aprenderlo por razones prácticas: es amplísimamente usado por páginas web dinámicas y por sistemas de administración, así que incluso si nunca has escrito en Perl, deberías aprender a leerlo. Mucha gente usa Perl en la forma que yo sugiero usar Python, para evitar la programacion en C en trabajos que no requieran la eficiencia de C. Necesitarás ser capaz de entenderlo.

Vale la pena aprender LISP por una razón diferente — La profunda e iluminadora experiencia que obtendrás cuando finalmente lo logres te hará ser mejor programador el resto de tus días, incluso si no usas LISP mucho. (Puedes obtener fácilmente algo de primera experiencia con LISP escribiendo y modificando los modos de edición del editor Emacs.)

Lo mejor hoy día es aprender estos cinco (Python, Java, C/C++, Perl y LISP). Además de ser estos lenguajes los mas importantes en el hacking, representan muy diversas formas de aproximarse a la programación, y cada uno te educará de diferentes maneras.

No puedo dar instrucciones completas en este documento de cómo puedes aprender a programar —es una habilidad compleja. Pero puedo adelantarte que los libros y los cursos no servirán (muchos, tal vez la mayoría de los mejores hackers, son autodidactas). Puedes aprender las características de los lenguajes —partes de conocimiento— de libros, pero el verdadero conocimiento lo adquieres en la vida real aplicando lo que ya sabes. Lo que sí servirá es a) leer código y b) escribir código.

El aprendizaje de la programación es como aprender a escribir bien en lenguaje natural. La mejor manera de aprender es leer algo de las cosas escritas por los maestros del estilo, luego escribir algunas cosas tú mismo, leer mucho más, escribir un poco más... y repetir esto hasta que lo que escribes empieza a mostrar la clase de fuerza y economía que aprecias en tus modelos.

Antes era difícil encontrar código de buena calidad para leer, porque había pocos programas de cierta magnitud disponibles en código fuente de tal manera que los hackers noveles pudieran meterles mano. Esta situación ha cambiado drásticamente: software de fuente abierta, herramientas de programación libres y sistemas operativos libres (todo ello hecho por hackers) están ampliamente disponibles en la actualidad. Lo que me lleva elegantemente a nuestro siguiente tema...

2. Consigue uno de los Unices libres; aprende a usarlo y a ponerlo en funcionamiento

Asumo que tienes un ordenador personal o puedes acceder a uno (a estos muchachos de hoy día les resulta tan sencillo obtenerlo... :-)). El paso con mucho más importante que cualquier novato puede dar en el camino de adquirir las habilidades de un hacker es obtener una copia de Linux o alguno de los otros Unices tipo BSD libres, instalarlo en una máquina personal y hacerlo funcionar.

Sí, es cierto que existen otros sistemas operativos en el mundo además de Unix. Pero sólo pueden encontrarse en formato binario —no puedes ni leer el código ni modificarlo—. Si intentas aprender a hackear en una máquina DOS, Windows o en un MacOS te sentirás como si tratas de aprender a bailar con el cuerpo escayolado.

Bajo OS/X es posible, pero solo una parte del del sistema es código de fuente abierta —Es como si estuvieras golpeando un muro de varias capas de cemento, y aparte tienes que ser cuidadoso para no desarrollar el mal hábito de depender del código propietario de Apple. Si te concentras en Unix bajo el capó, puedes aprender cosas mas útiles.

Unix es el sistema operativo de Internet. Si bien puedes aprender a usar Internet sin saber Unix, nunca podrás ser un hacker en Internet sin conocerlo. Por este motivo, la cultura hacker actual está muy centrada en Unix. (Esto no fue siempre así, e incluso la situación le desagrada a algunos de los hackers más veteranos, pero la simbiosis entre Unix e Internet es tan fuerte que hasta la energía de Microsoft parece incapaz de hacerle mella.)

Así que consigue un Unix —personalmente me gusta Linux, pero hay otros (y sí, puedes hacer funcionar Linux y DOS/Windows en la misma máquina). Apréndelo. Hazlo funcionar. Métele mano, anímate. Comunícate en Internet mediante él. Lee el código. Modifícalo. En ese sistema se incluyen las mejores herramientas de programación (que incluyen C, Lisp y Perl) de lo que cualquier sistema operativo de Microsoft ni siquiera podría soñar, además te divertirás y te sumergirás en un caudal de conocimientos de tal magnitud que nunca hubieras imaginado, hasta que en cierto momento, mirando hacia atrás, te darás cuenta que ya eres un maestro hacker consumado.

Si quieres saber más acerca del aprendizaje de Unix, ve a The Loginataka.

Si quieres meter tus manos en Linux, echa un ojo en Dónde puedo obtener Linux.

Puedes encontrar ayuda y recursos de BSD Unix en www.bsd.org.

He escrito sobre los fundamentos básicos de Unix y de Internet.

(Nota: No recomiendo instalar ni Linux ni BSD a solas si eres novato. Para Linux, encuentra un grupo de usuarios local de Linux y pide ayuda; o contáctalo mediante Open Projects Network. LISC mantiene canales IRC donde puedes obtener ayuda.)

3. Aprende a usar la Web y a programar en HTML

La mayoría de las cosas que ha construido la cultura hacker funcionan fuera de la vista del gran público, ayudando en el funcionamiento de fábricas, oficinas y universidades, y carecen de un impacto obvio en la vida de quienes no son hackers. La Web es la única gran excepción, y es tan enorme y brillante este juguete de hackers que incluso los políticos admiten que está cambiando el mundo. Sólo por esta razón (y hay un montón de otras igualmente buenas), debes aprender a trabajar en la Web.

No me estoy refiriendo a aprender a manejar un navegador (cualquiera puede hacer eso), sino que debes aprender a escribir HTML, el lenguaje de marcas de la Web. Si aún no sabes cómo programar, el aprendizaje que implica la escritura de HTML te enseñará algunos de los hábitos mentales que te ayudarán luego con la programación. Así que hazte una página personal. Prueba con XHTML, que es más claro que el clasico HTML. (Existen buenos tutoriales para principiantes en la Web; aquí hay uno.)

Pero no vayas a creer que por tener una página personal estás más cerca de ser un hacker. La Web está llena de páginas personales. La mayoría de ellas son banales, basura sin contenido —basura muy vistosa, pero basura al fin (si deseas saber más sobre este tema, mira en The HTML Hell Page).

Para que valga la pena, tu página debe tener contenido —debe ser interesante y/o útil para los otros hackers. Y esto nos lleva al próximo tema...

4. Si no tienes un inglés funcional, apréndelo

Como estadounidense y hablante nativo de inglés, era reacio a sugerir esto, por si se interpretaba como una suerte de imperialismo cultural. Pero hablantes nativos de otras lenguas me han urgido a que señale que el inglés es el lenguaje con el que trabaja la cultura hacker e Internet, y necesitarás saberlo para funcionar en la comunidad hacker.

Esto es muy cierto. Tiempo atrás, alrededor de 1991, aprendí que muchos hackers que tenían el inglés como segundo idioma lo usaban en discusiones técnicas, incluso cuando compartían su lengua natal; me comentaron que el inglés tiene un vocabulario técnico más rico que cualquier otra lengua y sencillamente por esto era mejor herramienta para el trabajo. Por razones similares, las traducciones de libros técnicos escritos originalmente en inglés son con frecuencia insatisfactorias (si es que se hacen).

Linus Torvalds, un finlandés, comenta su codigo en inglés (al parecer nunca se le ocurrió hacerlo de otra manera). Su fluidez con el inglés ha sido un importante factor en su habilidad para reclutar una comunidad mundial de desarrolladores de Linux. Y esto nos lleva al próximo tema...
Estatus en la cultura hacker

De manera similar a muchas otras culturas sin economía monetaria, el hackerismo se basa en la reputación. Estás intentando resolver problemas interesantes, pero cuan interesantes y buenas son las soluciones que encuentres es algo que sólo tus iguales o superiores técnicamente hablando serán capaces de juzgar.

De acuerdo a esto, cuando juegas el juego del hacker, aprendes a puntuarte principalmente en función de lo que los otros hackers piensan acerca de tus habilidades (este es el motivo por el cual no puedes ser un hacker de verdad hasta que otros hackers te denominen así de manera consistente). Este hecho está empañado por la imagen del hacking como trabajo solitario; también por un tabú cultural hacker (que ahora está decayendo, pero aún es fuerte) que impide que se admita el ego o la validación externa como elementos involucrados en la propia motivación.

Específicamente, el hackerismo es lo que los antropólogos denominan una cultura del don. Adquieres estatus y reputación no mediante la dominación de las otras personas, ni por ser hermoso/a, ni por tener cosas que las otras personas desean, sino por donar cosas. Específicamente, al donar tu tiempo, tu creatividad, y el resultado de tu destreza.

Existen básicamente cinco clases de cosas que puedes hacer para obtener el respeto de los hackers:
1. Escribir software de fuente abierta

Lo primero (lo más central y más tradicional) es escribir programas que los otros hackers opinen que son divertidos o útiles, y donar los fuentes del programa a la cultura hacker para que sean utilizados.

(Solíamos llamarlo free software pero esto confundía a demasiada gente, que no estaban seguros de qué se suponía que significaba free [en inglés, el término free es polisémico y puede significar "libre" o "gratis". En castellano no se da tal ambigüedad por lo que la expresión "software libre" resulta perfectamente adecuada — N. del T.]. La mayoría de nosotros, al menos un ratio 2:1 de acuerdo con los análisis del contenido de la web, ahora preferimos el término software "open source" [En castellano, sin embargo, se sigue usando habitualmente "software libre", aunque en esta versión hemos respetado, como es natural, el cambio en la terminología de Eric, que ha sustituido " free software" por open source en todos sus documentos, y lo hemos traducido por "código de fuente abierta" — N. del T.]).

Los más reverenciados semidioses del hackerismo son las personas que han escrito programas de gran magnitud, con grandes capacidades que satisfacen necesidades de largo alcance, y los donan, de tal manera que cualquiera pueda utilizarlos.

2. Ayudar a probar y depurar software de fuente abierta

También son reconocidas aquellas personas que depuran los errores del software de fuente abierta. En este mundo imperfecto, inevitablemente pasaremos la mayoría de nuestro tiempo de desarrollo en la fase de depuración. Este es el motivo por el cual los desarrolladores de software de fuente abierta piensan que un buen "beta-tester" (probador de versiones beta, alguien que sabe cómo describir claramente los síntomas, que puede localizar correctamente los problemas, que tolera los errores en una entrega apurada, y que está dispuesto a aplicar unas cuantas rutinas sencillas de diagnóstico) vale su peso en oro. Aun contando con un solo probador de estos, puede hacerse que el proceso de depuración pase de ser una prolongada pesadilla que lo deja a uno exhausto a ser sólo una saludable molestia.

Si eres novato, trata de encontrar un programa en desarrollo en el cual estés interesado, y conviértete en un buen probador beta. Hay una progresión natural desde ayudar a probar programas, luego ayudar a depurarlos y más adelante ayudar a modificarlos. Aprenderás un montón de esa manera, y la gente te ayudará en el futuro.

3. Publicar informacion útil

Otra buena cosa que puedes hacer es recopilar y filtrar información útil e interesante y construir páginas web o documentos tipo FAQ ("Preguntas Frecuentes", y ponerlos a disposición de los demás.

La gente que mantiene las FAQ técnicas más importantes gozan de casi tanto respeto como los autores de software libre.

4. Ayudar a mantener en funcionamiento la infraestructura

La cultura hacker (y el desarrollo ingenieril de Internet, para el caso) funciona gracias al trabajo voluntario. Existe una gran cantidad de trabajo necesario pero sin glamour que debe hacerse para que esto siga marchando —administrar listas de correo, moderar foros de discusión, mantener sitios donde se archivan grandes cantidades de software, desarrollar RFCs y otros estándares técnicos.

La gente que desarrolla estas actividades goza de mucho respeto, porque todos saben que esos trabajos son grandes consumidores de tiempo y no tan divertidos como meterse con el código. Al hacerlos demuestran su dedicación.

5. Hacer algo por la cultura hacker en sí misma

Finalmente, puedes propagar la cultura hacker en sí misma (por ejemplo, escribiendo un texto acerca de cómo transformarse en hacker :-)). Esto es algo que no estarás en disposición de hacer hasta que seas bien conocido en el ambiente por alguna de las cuatro cosas recién descritas.

La cultura hacker no tiene líderes exactamente, pero tiene héroes culturales, ancianos de la tribu, historiadores y portavoces. Cuando hayas estado en las trincheras tiempo suficiente, podrás crecer y transformarte en uno de ellos. Pero ten cuidado: los hackers desconfían del ego ruidoso en sus jefes tribales, así que la búsqueda visible de esa clase de fama es peligrosa. En lugar de esforzarte en ello, es mejor colocarse en una posición tal que ella caiga sobre ti, y luego debes comportarte de manera modesta y con gracia con tu estatus.
La conexión hacker/nerd

Contrariamente al mito popular, no tienes que ser un nerd [literalmente "empollón", pero en la jerga hacker se ha asumido de forma irónica, perdiendo el matiz originalmente despectivo, y ha acabado usándose como sinónimo de alguien que se preocupa por las cosas importantes y no se entretiene en trivialidades. — N. del T.] para ser hacker. Ayuda, sin embargo, y muchos hackers son nerds. Al ser un marginado social, el nerd puede mantenerse concentrado en las cosas realmente importantes, como pensar y hackear.

Por esta razón, muchos hackers han adoptado la etiqueta "nerd" e incluso utilizan el desagradable término geek como insignia de orgullo —es su forma de declarar su propia independencia de las expectativas sociales normales.

Si puedes concentrarte lo suficiente en el hacking para ser bueno en ello, y encima disfrutar de vida personal, está bien. Es muchísimo más fácil ahora que cuando yo era un novato en los años setenta; la cultura dominante ve con mejores ojos a los tecno-nerds en la actualidad. Hay además un número creciente de personas que se dan cuenta de que con frecuencia los hackers son un material de alta calidad para novio/novia/marido/esposa.

Si te siente atraído por la actividad hacker porque no tienes vida propia, está bien también —al menos no tendrá problemas de concentración—. A lo mejor más adelante puedes conseguir una vida propia como el resto de la gente.
Cuestiones de estilo

De nuevo, para ser un hacker, debes desarrollar la mentalidad del hacker. Existen algunas cosas que puedes hacer cuando estás sin ordenador, que pueden ayudarte. Estas cosas no son sustituto para la actividad propia de hackear (nada lo es) pero muchos hackers las realizan, y sienten que de alguna manera primitiva se conectan con la esencia de la actividad de hackear.

*

Aprende a escribir correctamente en tu lengua. A pesar de que existe el estereotipo de que los programadores no son capaces de escribir, una cantidad sorprendente de hackers (incluyendo a los mejores que conozco), son escritores competentes.
*

Lee ciencia-ficción. Ve a las reuniones sobre ciencia-ficción (es un buen método para conocer hackers y proto-hackers).
*

Estudia zen, y/o practica artes marciales. (La disciplina mental se parece en ambos casos.)
*

Desarrolla un oído analítico para la música. Aprende a apreciar clases peculiares de música. Aprenda a tocar correctamente algún instrumento musical, o a cantar.
*

Desarrolla inclinación por los dobles sentidos y los juegos de palabras.

Cuantas más cosas de estas hayas hecho, es más probable que poseas material natural para hacker. Por qué estas cosas en particular y no otras es algo que no está completamente claro, pero todas están conectadas con un mezcla de tu parte izquierda y derecha de las habilidades de tu cerebro, lo que parece ser una cosa importante; los hackers ser capaces tanto de razonamiento lógico como de dar pasos al margen de lógica aparente de un problema en un momento dado.

Trabaja tan intensamente como juegas y juega tan intensamente como trabajas. Para los verdaderos hackers, la diferiencia entre "juego", "trabajo", "ciencia" y "arte" tienden a desaparecer, o mezclarse en un alto nivel de creatividad. Además, no te des por satisfecho con tener un estrecho rango de habilidades. Aunque la mayoría de los hackers se autodescriben como programadores, suelen ser más que competentes en actividades diversas —administración de sistemas, diseño web y arreglar problemas de hardware son algo común—. Un hacker que, por un lado, es administrador de sistemas, por el otro es también habilidoso en programación de scripts y diseño de webs. Los hackers no hacen las cosas a medias; si se meten de lleno en un tema, tienden a ser muy buenos en él.

Finalmente, unas cuantas cosas que no debes hacer:

*

No uses un nombre de usuario tonto o grandioso.
*

No te metas en "flamewars" (discusiones airadas) en Usenet (ni en ningún otro lado).
*

No te llames a ti mismo "ciberpunk", y no pierdas tu tiempo con nadie que lo haga.
*

No publiques en los foros ni escribas correos con montones de errores de tecleo o construcciones gramaticales incorrectas.

La única reputación que te ganarás con esas costumbres es la de tonto. Los hackers tienen una gran memoria —puede costar años hasta que te acepten de nuevo después de estas cosas.

El problema con los apodos virtuales merece alguna explicación. Ocultar tu identidad detrás de un apodo es un comportamiento infantil y tonto que es característico de los crackers, warez d00dz, y otras formas inferiores de vida. Los hackers no hacen eso; ellos están orgullosos de lo que que hacen y lo quieren asociado con sus nombres reales . Así que si tienes un nombre de estos, abandónalo. En la cultura hacker solo servirán para marcarte como un perdedor.

Otras fuentes de información

Peter Seebach mantiene un excelente Hacker FAQ para directivos que no entiendan el trato con hackers. Si la pagina de Peter no responde, en la siguiente búsqueda en Excite encontrarás una copia.

También he escrito A Brief History Of Hackerdom [existe traducción castellana: Breve historia de la cultura hacker — N. del T.].

He escrito un artículo The Cathedral and the Bazaar [existe traducción castellana: La catedral y el bazar — N. del T.], donde se explica bastante sobre cómo funciona la cultura de Linux y del software de fuente abierta. He estudiado este tema más directamente en su segunda parte, Homesteading the Noosphere [existe traducción castellana: Cultivando la noosfera — N. del T.].

Rick Moen ha escrito un excelente documento en how to run a Linux user group.

Rick Moen y yo hemos colaborado en otro documento en How To Ask Smart Questions [existe traducción castellana: Cómo hacer preguntas de manera inteligente — N. del T.]. Esto te ayudará a encontrar asistencia en el camino.

Si necesitas instrucciones para lo básico como ordenadores personales, Unix e Internet , ve a The Unix and Internet Fundamentals HOWTO.

Cuando publicas software o escribes parches, procura seguir las directrices en el Software Release Practice HOWTO.

Acelera tu Turbonett con Banda Ancha y Navegacion Full

Por defecto, Windows XP Pro reserva 20% del ancho de banda de la conexión a Internet en caso de congestión en la red, para esto utiliza una herramienta llamada Programador de paquetes

Atención: este no es el caso bajo Windows XP Home Edition, para el cual no se hace ninguna reserva de ancho de banda. Por lo tanto este truco no sirve para Windows XP Home Edition.

Es posible sobrepasar este valor modificando el parámetro que especifica el porcentaje del ancho de banda reservado.
Para ello, hay que abrir el Programador de paquetes:
Inicio / Ejecutar / gpedit.msc
(gpedit.msc existe únicamente bajo el sistema Windows XP Profesional y Windows 7 todas las verciones menos Estarte)

En el panel de la izquierda expandes Configuración del equipo / Plantillas administrativas / Red y pulsas sobre Programador de paquetes QoS (dos veces)

Luego en el panel de la derecha pulsas dos veces sobre Limitar ancho de banda reservado.

Una ventana de configuración se abrirá. La opción Limite de ancho de banda (%) permite indicar la cantidad de ancho de banda que el sistema puede reservar. Si deshabilitas este parámetro o no lo configuras, su valor por defecto (20%) es utilizado.

Por ello, es necesario hacer clic en Habilitada y luego poner el valor en 0. (yo le puse el numero 1 por que aveces se vuelve a auto programar y vuelve a la antigua configuracion recomiendo ponerle el valor 1

Haz clic en Aplicar, luego en Aceptar, cierra todas las ventanas de configuración y reinicia el ordenador para que la modificación sea tomada en cuenta.



AMPLIAR FLUJO DE DATOS
Para Acelerar la velocidad de conexion podemos configurar las opciones de MTU (maximum Transmission Unit) que designa el tamaño en bytes del datagrama mas granque que puede pasar por el protocolo de internet. Modificando esto conseguimos que circulen paquetes de datos mas grandes, los que nos beneficiara con una mayor velocidad de navegacion y descarga de archivos.
Para esto nos dirigimos al editor del registro (INICIO/EJECUTAR) y escribimos "regedit", pulsamos (ACEPTAR).
lo exploramos hasta encontrar la rama: HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Tcpip/Parameters/Interfaces y cremoas la clave "Adapter ID" (Edicion/Nuevo/Clave). Luego Creamos el valor DWORD (Edicion/Crear Valor DWORD) y lo llamamos "MTU" a la cula le agregamos el valor que nos convenga.
(576=DialUp 1492=ADSL 1500=Calbemodem).

Optimizar Carga De Sitios
Al ingresar a un sitio web la PC envia y recibe datos para presentar la pagina en nuestro navegador vinculando la direccion web con una direccio IP pero bueno supongo q esto no les interesa.. solo les interesa acelerar internet.. asique a partir de ahora no explico mas nada.. o trato de resumir lo mas posible... para cargar las paginas mas rapido abrimos otra vez el editor del registro.. (inicio/ejecutar/regedit)
y buscamos HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters
y luego asiganmos a las siguenites variables DWORD (si no existen las creamos (Edicion/Crear Valor DWORD)).

.CacheHashTableBucketSize : 00000001
.CacheHashTableSize : 00000180
.MaxCacheEntryTtlLimit : 0000fa00
.MaxSOACacheEntryTtlLimit : 0000012d

Priorizar La Carga De Sitios Web
Vamos al editor del registro que a esta altura ya sabemos como ir y buscamos lo siguiente HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/SEervices/Tcpip/ServiceProvider

creamos o modificamos los siguientes valores DWORD
.DnsPriority : 00000001
.HostsPriority : 00000001
.LocalPriority : 00000001
.NetbPriority : 00000001

Evitar El Cache De DNS Fallidos
Esto almacena la info de los servidores de nombres correctos o incorrectos... (EJ: www.google.com.ar o www.gogle.com.ar) deshabilitandolo evitaremos demoras producidas por direcciones invalidas.
ejecutamos el editor del registro y buscamos la siguiente rama HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Dnscache/Parameters
editamos o creamos los siguientes valores DWORD e ingresamos los valores dados a continuacion
.NegativeCacheTime : 00000000
.NetFailureCacheTime : 00000000
.NegativeSOACacheTime : 00000000

Mas Velocidad Si Compartimos Internet
El XP y el Win 2000 poseen una falla de programacion que provoca que el sistema demore cierto riempo al navegar las unidades de red, debido a que tambien busca info en la carpeta destinada a las tareas programadas.
lo que se traduce como una perdida de velocidad en internet, como tambien el compartir archivos e impresoras.

Para quitar este obstaculo ejecutamos el editor del registro y exploramos hasta encontrar HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Explorer/RemoteComputer/NameSpace
Y buscamos la rama denominada {D62779904C6A-11CF-8D87-00AA0060F5BF} (la cual hace referencia a tareas programadas) y la BORRAMOS. y luego localizamos {2227A803AEA-1069_a2DE-08002B30309D} Y la ELIMINAMOS tambien.



Programas y Configuracion Recomendada para Navergar RAPIDO

Ad-Ware : Te mantiene tu sistema e internet libre de saturaciones y spias, hacker, troyanos y cosas que pongan el riesgo el funcionamiento de tu Internet

TuneUp Utilities : es un paquete de aplicaciones para optimizar, personalizar y corregir fallos del sistema.1 Entre otros propósitos, permite desfragmentar el disco duro, eliminar archivos temporales, realizar ajustes automáticos para incrementar la velocidad de navegación en Internet y desfragmentar y corregir errores del registro de Windows.

Mipony : Mipony es un gestor de descargas gratuito especialmente diseñado para automatizar la descarga de archivos de páginas de hospedaje gratuitas como Rapidshare, Megaupload, Hotfiles y muchas otras, lo recomiendo por que al hacer estas modificaciones de ancho d ebanda, podes descargar muy rapido y ala vez mas Seguro libre de Virus

Microsoft Security Essentials : Es la solución de seguridad más popular en todo el mundo, al menos según un informe de OPSWAT correspondientes al segundo trimestre de 2011.

El antivirus gratuito de Microsoft es ofrecido a los usuarios de los sistemas operativos Windows, incluyendo Windows 7 RTM y SP1, se ha encontrado que se ejecutan en nada más y nada menos que 10.66% de los 43,000 ordenadores de todo el mundo.

Microsoft Security Essentials, ahora en la versión 2.0 fue lanzada a finales de 2010, es una solución gratuita de seguridad básica deque el gigante del software lanzó inicialmente en 2009, y ya tiene 30 millones de descargas.
Lo recomiendo por que ademas de ser un buen antivirus (NUNCA VENCE) para los que usan windows 7 original o crackeado se los recomiendo

Ccleaner : s un Software que te ayuda a mantener tu sistema en perfecto estado haciendo una limpieza a fondo que mejora el rendimiento general y aumenta el espacio libre en disco.



Paso 1

Modificar configuración de efectos visuales

Se puede modificar ciertas opciones de los efectos que trae windows xp, esto mejorará notoriamente. Para ello, iremos a:
"Inicio", Luego abrimos el "Panel de control", en él haremos click en "Cambiar a vista clasica" como vemos en la imagen:
Configiraciones


Luego nos dirigimos a Sistema que el icono se ve asi:

Una vez abierto "Sistema" nos desplazamos hacia "Opciones avanzadas" como ven en la imagen:

Una vez alli, en "Opciones avanzadas", nos dirigimos a "Rendimiento" y le damos click a "Configuración".

Alli veremos que se encuentran los efectos visuales, les voy a indicar cuales deben dejar para que esta configuración no afecte el tema de escritorio de ustedes. Deberan Desmarcar TODOS menos los que ven en la siguiente imagen:

Para los que no pueden ver la imagen los efectos a dejar marcados son:
-Suavizar bordes para las fuentes de pantalla
-Usar estilos visuales en ventanas y botones
-Usar sombras en los nombres de los iconos del escritorio
-Usar tareas comunes en las carpetas

Paso 2

Deshabilitar servicios innecesarios de Windows XP

Hay servicios que Windows XP trae por defecto activados que son totalmente inutiles, pero a su vez, voluminosos. Por lo que es recomendable desactivar algunos si en verdad se desea aprovechar un mejor rendimiento. Para ello, debemos abrir la configuración de los servicios, que es muy simple y haremos lo siguiente:
Primero, iremos a inicio, luego a "Ejecutar"

Y escribiremos(sin las comillas) "services.msc"

Dentro veremos todos los servicios de Windows XP, en donde podremos configurarlos en su totalidad, tanto como habilitarlos, deshabilitarlos, ponerlos en manual, detenerlos, etc.
Aqui les muestro como configurar los servicios, debemos hacer doble click en cada uno para hacer la configuración como se ve en la imagen:


Automatico:El servicio se iniciara automaticamente cuando el sistema se inicie.
Manual:El servicio se inicia unicamente cuando el usuario ejecuta una función que dependa de este.
Deshabilitado:El servicio queda completamente "Intacto" y no se iniciara a menos que se modifique a "Manual" o "Automatico"

Aqui estan todos los servicios con sus recomendaciones y explicación de utilidad:

1) Acceso a dispositivo de interfaz humana (HidServ)


Se refiere a dispositivos multimedia, como dispositivos apuntadores (ej. mouse…), teclados, controles remotos u otro dispositivo de interfaz Bluetooth.

Por lo general no se usan este tipo de dispositivos o si se usan suelen tener drivers propios, por lo que lo podemos Deshabilitar. Si usas este tipo de dispositivo y al deshabilitarlo no funciona correctamente lo pones en Manual o Automático.

2) Actualizaciones automáticas (Wuauserv)

Si te preocupa el consumo de recursos lo puedes Deshabilitar pero obviamente no podrías utilizar de nuevo esta propiedad hasta que actives el servicio cosa que es requeridad si desearas realizar la actualización manual desde la página Microsoft Windows Update.

3) Adaptador de rendimiento WMI (WmiApSrv)

Digamos que está en desuso, por lo que no sucede nada si se Deshabilita.

4) Administración de aplicaciones (AppMgmt)

Maneja el software instalado, pero sin este servicio, las nuevos programas instalados continúan almacenándose en Agregar/Quitar Programas, por lo que lo ponemos en Manual.

Ahora bien, si tu equipo pertenece a una red corporativa, sería interesante ponerlo en Automático, ya que sin este servicio no se podrá instalar, quitar o enumerar las aplicaciones instaladas en el servicio de Microsoft Active Directory, no recuperará la información de las aplicaciones instaladas y tampoco aparecerá esta información en la sección Agregar nuevos programas de Agregar/Quitar Programas, es decir, no habrá programas disponibles en la red.

5) Administrador de carga (uploadmgr)

Si no formas parte de una red, lo debes Deshabilitar. Y si formas parte de una red también se puede Deshabilitar, ya que no interfiere en el funcionamiento de la red para compartir archivos e impresoras.

6) Administrador de conexión automática de acceso remoto (RasAuto)

Detecta los intentos erróneos de conexión a una red o equipo remoto y proporciona métodos alternativos de conexión, es decir, si un acceso a red no se encuentra disponible, aparecerá un cuadro de diálogo que permitirá realizar una conexión de acceso telefónico o VPN con el equipo remoto.

Es recomendable tenerlo en Manual. En raras ocasiones, algunos proveedores utilizan sistemas de logueo, por lo que si al poner este servicio en Manual, tienes problemas con la conexión a internet, ponlo en Automático.

7) Administrador de conexión de acceso remoto (RaMan)
Administra las conexiones de acceso telefónico y VPN establecidas desde el equipo a Internet u otras redes remotas.

Es recomendable ponerlo en Manual.

8) Administrador de cuentas de seguridad (SamSs)

Es un subsistema protegido que administra la información de cuentas de usuarios y grupos.

Nunca se debe deshabilitar, por tanto, hay que dejarlo en Automático.

9) Administrador de Depuradores de máquina (MDM)


Es usado por los depuradores de sistemas como Visual Basic 6, enterprise o .Net. Deshabilitado a menos que programes con visual

10) Administrador de discos lógicos (dmserver)

Si usas discos removibles o cambias constantemente de discos rígidos ponlo en Automático, de lo contrario es recomendable ponerlo en Manual.

11) Administración de sesión de Ayuda de escritorio remoto (RDSessMgr)

Sobre todo, por razones de seguridad, es recomendable Deshabilitar este servicio, ya que podríamos aceptar una petición de conexión no deseada.

12) Adquisición de imágenes de Windows (WIA) (stisvc)

Es recomendable ponerlo en Manual, y sólo si se nos dan problemas la utilización de escáneres o cámaras lo ponemos en Automático.

13) Almacenamiento protegido (ProtectedStorage)

Este servicio protege el almacenamiento de información confidencial, como las claves privadas, y evita el acceso de servicios, procesos o usuarios no autorizados.

Para entendernos, es ese mensaje que aparece de “Recordar Contraseña”. A pesar de que esa información se almacena encriptada, personalmente pienso que es más seguro aún no guardar ningún tipo de información importante en disco, por lo que se debe Deshabilitar.

De todos modos si usas la función “Recordar Contraseña” o “Autocompletar” (para Outlook, conexión a Internet, o controladores de dominio que requieren autentificación…) ponlo en Automático.

14) Aplicación del sistema COM+ (COMSSysApp)

Si cuentas con aplicaciones que funcionen con el componente COM+ ponlo en Automático, de lo contrario detenlo y ponlo en Manual.

15) ASP.NET State Service/Servicio de estado ASP.NET (aspnet_state)
Provee soporte para los estados de salida de sesión de procesos. En realidad, este servicio solo es necesario para alguien que trabaje con programación en ASP.NET. Sino programas en ASP.NET, entonces debe estar en Manual o Desactivado.

16) Audio de Windows (AudioSrv)

Si no tienes placa de sonido lo puedes Deshabilitar, de lo contrario ponlo en Automático, ya que es fundamental para escuchar sonidos en la computadora.

17) Ayuda de NetBIOS sobre TCP/IP (LmHosts)

Es un agujero para la seguridad, así que hay que Deshabilitarlo, salvo que uses el viejo protocolo NetBIOS en tu red.

18) Ayuda y soprte técnico (Helpsvc)
Particularmente prefiro no recibir ayuda de la Web de Microsoft, además consume recursos, por lo que lo tengo Deshabilitado.

También lo puedes poner en Manual y habilitarlo sólo cuando lo necesites (si es que alguna vez lo necesitas ).

19) Centro de Seguridad (wscsvc)

Se encarga de monitorear y configurar la seguridad del sistema, por ejemplo te avisará si tienes algún antivirus desactualizado o sino lo tienes en lo absoluto, permite la configuración y aviso del estado del firewall interno de Windows o de algún tercero. En realidad, si tu sabes que tienes un antivirus actualizado y un firewall activo, este servicio deja de ser importante. Automático si en verdad lo ves útil, sino, Deshabilitado

20) Cliente de seguimiento de vínculos distribuidos (TrkWks)

Si tu pc es parte de un Dominio NT y el Controlador de Dominio se encuentra corriendo el Servidor de seguimiento de vínculos distribuidos, debes ponerlo en Automático, de lo contrario lo puedes poner Manual.

21) Cliente DHCP (Dhcp)

Si no formas parte de una red o tienes un IP fijo o estático ponlo en Manual.

Si formas parte de una red, tu IP es dinámico o te conectas a través de un módem debes ponerlo en Automático.

22) Cliente DNS (Dnscache)

Si tu pc está en red debes ponerlo Automático.

De lo contrario puedes ponerlo Manual, aunque tienes que tener en cuenta que si alguna vez necesitas reparar la conexión a Internet aparecerá un error que dice “Purgar la caché de resolución DNS”, con lo que deberás iniciar este servicio para continuar reparando.

23) Cliente Web (WebClient)

Por razones de seguridad se aconseja no poner Automático, por tanto puedes ponerlo Manual, aunque personalmente no le veo ninguna utilidad a este servicio, por lo que se podría Deshabilitar.

24) Cola de impresión (Spooler)

Automático, a menos que no dispongas de una impresora, en cuyo caso se puede Deshabilitar.

25) Compatibilidad de cambio rápido de usuario (FastUserSwitching)

Este servicio nos permite cambiar de usuario sin tener que cerrar sesión en el con el otro usuario.

Si no tienes varios usuarios en el equipo, Deshabilítalo.

Si cuentas con varios usuarios y le ves utilidad a este servicio, ponlo en Automático.

Particularmente no soy partidario del cambio rápido de usuario, ya que es muy habitual que se cambie de usuario y se dejen programas ejecutándose en el otro usuario (es malo para la seguridad y consume muchos recursos). Además no es aconsejable apagar el equipo con programas ejecutándose, y esto podría pasar si un usuario no cierra sesión y se cambia de usuario, por tanto mi recomendación es Deshabilitar.

26) Conexión de seguridad a Internet (ICF)/Firewall de Windows/Conexión compartida a Internet (ICS) (SharedAccess)

Si compartes conexión o usas el Firewall de Windows ponlo en Automático, de lo contrario, Deshabilítalo.

27) Conexiones de red (Netman)

Si tu pc está en red o se conecta a través de un módem ponlo en Automático, de lo contrario Manual.

28) Conexión inalámbrica rápida/Configuración inalámbrica rápida/Wireless Zero Configuration Service (WZCSVC)

Permite la configuración de adaptadores 802.11

Si tu conexión es inalámbrica (Wireless) ponlo en Automático, de lo contrario Deshabilítalo.

29) Coordinador de transacciones distribuidas de Microsoft (MSDTC)

Por lo general no tiene utilidad por lo que lo ponemos en Manual, aunque si estás en una red y hay bases de datos, colas de mensajes y sistemas de archivos, entonces te conviene ponerlo Automático.

30) DDE de red (NetDDE)

Tampoco tiene utilidad, por lo que se puede Deshabilitar, a menos que tu pc esté en red y se utilicen datos compartidos como el Portafolio, en cuyo caso conviene ponerlo en Automático.

31) Detección de hardware shell (ShellHWDetection)

Se utiliza para le detección de dispositivos o hardware AutoPlay, como ciertas lectoras de CD o DVD.

Mi recomendación es ponerlo Automático, aunque se puede Deshabilitar y sólo habilitarlo si el sistema no nos reconoce alguna lectora o disquetera o el chequeo de unidad del Explorador de Windows se hace molesto.

32) DSMD de DDE de red (NetDDEdsdm)

Tiene graves vulnerabilidades, además no creo que te sea de ninguna utilidad, por lo que Deshabilítalo.

33) Enrutamiento y acceso remoto (RemoteAccess)
Es otro gran agujero para la seguridad, Deshabilítalo.

34) Escritorio remoto compartido de NetMeeting (mnmsrvc)

Permite a usuarios autorizados acceder remotamente a tu escritorio, obviamente podríamos dar autorización a alguien no deseado, por tanto es otro gran agujero para la seguridad. Se debe Deshabilitar este servicio.

35) Estación de trabajo (Ianmanworkstation)

Si deshabilitas este servicio, las conexiones de cliente de red a servidores remotos no estarán disponibles, por tanto debe estar en Automático.

36) Examinador de equipos (Browser)

Si no formas parte de una red o te conectas a través de un módem, ponlo Manual.

Si formas parte de una red y no usas el protocolo WINS, entonces ponlo en Automático.

37) Extensiones de controlador de Instrumental de administración de Windows (Wmi)

Supervisa todos los controladores y proveedores de seguimiento de sucesos configurados, ponlo Manual.

38) Horario de Windows (W32Time)

Chequea automáticamente la hora con un servidor de Internet. Si te preocupa el consumo de recursos Deshabilítalo, ya que de todas formas nuestro pc marcará la hora, salvo que tengas la pila agotada.

39) Host de dispositivo Plug and Play universal (upnphost)

Se puede Deshabilitar. Si algún componente te da problemas lo pones en Manual.

40) HTTP SSL (HTTPFilter)

Se activa y desactiva automáticamente durante transacciones a través de páginas que usen el protocolo HTTPS (Protocolo de Transferencia Hipertexto Segura). Manual.

41) Iniciador de procesos de servidor DCOM (DcomLaunch)

Instalado con el Service Pack 2 de windows XP, permite la carga de procesos DCOM. Automático.

42) Inicio de sesión en red (Netlogon)

Mantiene un canal seguro entre el equipo y el controlador de dominio para la autenticación de usuarios y servicios

A menos que cuentes con una red con configuración a través de dominios, lo puedes Deshabilitar.

43) Inicio de sesión secundario (seclogon)

Usado habitualmente por administradores para iniciar sesión como usuario restringido, empleando solamente el inicio de sesión secundario para ejecutar temporalmente una aplicación como Administrador.

Personalmente no le veo mucha utilidad, así que se puede Deshabilitar.

44) Instantáneas de volumen (VSS)

Si no haces copias de seguridad habitualmente, ponlo en Manual, para iniciarlo solamente cuando te dispongas a hacer una copia de seguridad.

45) Instrumental de administración de Windows (winmgmt)

Si detenemos este servicio, la mayoría del software basado en Windows no funcionará correctamente, por tanto siempre debe estar en Automático.

46) Llamada a procedimiento remoto (RPC) (RpcSs)

Nunca se debe detener o deshabilitar este servicio, ya que si no el sistema operativo no podrá realizar cargas, por tanto siempre Automático.

47) Localizador de llamadas a procedimiento remoto (RPC) (RpcLocator)

Después de Windows 95, este servicio está en desuso, por tanto Deshabilítalo.

48) Medios de almacenamiento extraíbles (NtmsSvc)

Se utiliza para la administración de medios removibles como ser Tape Backups, Jaz, Zip, LS120, SyQuest, discos de cintas, pendrives, etc… Ponlo Manual para que se inicie cuando sea necesario.

49) Mensajero (Messenger)

Es una utilidad que sirve para trasmitir mensajes del servicio de alertas, y también entre clientes y servidores, es decir, permite mandar mensajes a través de ventanas emergentes a otro ordenador de una misma red, utilizando el servicio "net send".

Es uno de esos grandes agujeros para la seguridad, ya que tiene una grave vulnerabilidad que es aprovechada por los "spammers".

En lo que a seguridad se refiere te aconsejo que lo tengas Deshabilitado. Aunque si formas parte de una red deberás pedir permiso al administrador.

50) MS Software Shadow Copy Provider (SwPrv)

Salvo que cuentes con algún software para realizar copias de seguridad (Ej.- Norton Gosht), Deshabilítalo.

51) NLA (Network Location Awareness) (Nla)

Deshabilítalo, a menos que uses el servicio “Conexión compartida a Internet” (red con conexión compartida).

52) Notificación de sucesos del sistema (SENS)

Supervisa y realiza un seguimiento de los sucesos del sistema como, por ejemplo, sucesos de red de inicio de sesión en Windows y de alimentación, y los notifica a los suscriptores del sistema de sucesos de COM+.

Recomiendo el modo Automático, aunque si no necesitas que se registren los inicios de sesión del sistema lo puedes Deshabilitar.

53) Plug and Play (PlugPlay)

Hace que tu equipo se adapte y reconozca los cambios de hardware, por tanto Automático.

54) Portafolios (ClipSrv)

Habilita el Visor del Portafolios para crear y compartir páginas de datos que podrán revisar los usuarios remotos.

Deshabilítalo.

55) Programador de tareas (Schedule)

Si tu obsesión es el consumo de recursos Deshabilítalo, aunque debes saber que no podrás configurar y programar tareas automatizadas en el equipo, por ejemplo te dará error la actualización automática de tu Antivirus (o cualquier otro software), por lo que tendrás que actualizar manualmente.

56) Proveedor de compatibilidad con seguridad LM de Windows NT (NtlmSsp)
No creo que te sea de utilidad, Deshabilítalo.

57) QoS RSVP (RSVP)

Deshabilítalo.

58) Registro de sucesos (Eventlog)

Permite visualizar los mensajes del registro de sucesos emitidos por programas y componentes basados en Windows en el Visor de sucesos.

Es importante que siempre esté en Automático, de lo contrario no se podrán diagnosticar los problemas del sistema.

59) Registro remoto (RemoteRegistry)

Por razones de seguridad Deshabilita este servicio, ya que si no, algún indeseado te podría modificar el registro.

60) Registros y alertas de rendimiento (SysmonLog)


Personalmente prefiero Deshabilitar este servicio, aunque si necesitas recopilar información del rendimiento de tu pc, entonces ponlo Automático.

61) Servicio COM de grabación de CD de IMAPI (ImapiService)

Manual, así sólo se iniciará cuando lo necesites.

62) Servicio de alerta (Alerter.exe)

Evidentemente si no estás en una red, Deshabilítalo.

Si estás en una red deberás consultar al administrador.

63) Servicio de descubrimientos SSDP (SSDPSRV)

Si no estás en una red, Deshabilítalo.

Si estás en una red, también lo puedes Deshabilitar, a menos que te de problemas algún dispositivo externo.

64) Servicio de Index Server (cisvc)

Si Deshabilitamos este servicio, las búsquedas de texto serán más lentas, pero al Habilitarlo, requiere gran cantidad de recursos.

Definitivamente, pienso que sales ganando si lo Deshabilitas.

65) Servicio de informe de errores (ERSvc)

Es ese mensajito que a veces aparece de “Enviar informe de errores a Microsoft”; informa de errores para servicios y aplicaciones que se ejecutan en entornos no estándar.

Seguro que cuando aparece ese mensaje lo “Cancelas”, así que no tiene sentido que lo tengas Habilitado.

Además nunca sabremos a ciencia cierta que información estamos mandando a Microsoft cuando lo “Aceptamos”.

Personalmente prefiero Deshabilitarlo.

66) Servicio de puerta de enlace de capa de aplicación (ALG)

Si compartes conexión o usas el Firewall de Windows: Automático.

De lo contrario: Manual.

67) Servicio de restauración de sistema (Srservice)

Consume recursos, pero lo considero importante: Automático. Así si algo falla podemos restaurar el sistema a un punto anterior.

Evidentemente, si no te parece interesante esta opción, se puede Deshabilitar.

68) Servicio de transferencia inteligente en segundo plano (BITS)

Constituye un mecanismo de transferencia de archivos en segundo plano, así como un administrador de cola.

Si lo Deshabilitas no podrás recibir Actualizaciones Automáticas hasta que no reinicies. Lo puedes Deshabilitar.

69) Servicio del administrador de discos lógicos (dmadmin)

Manual.

70) Servicio del número de serie de medio portátil (WmdmPmSp)

Deshabilítalo, a menos que tengas un reproductor de música portátil y te de problemas.

71) Servicios de cifrado (CryptSve)

Proporcionan servicios de administración de claves para el equipo.

Automático.

72) Servicios de Terminal Server (TermService)

Proporciona un entorno con varias sesiones que permite a los dispositivos del cliente obtener acceso a una sesión del escritorio de Windows virtual y a programas basados en Windows que se ejecutan en el servidor.

Deshabilitado, a menos que lo utilices.

73) Servicios IPSEC (PolicyAgent)

Usado en Redes Privadas Virtuales, VPNs (Virtual Private Networks).

Deshabilitado, a menos que lo uses.

74) Servidor (lanmanserver)


Si no estás compartiendo archivos e impresoras en una red, Deshabilítalo, de lo contrario, Automático.

75) Sistema de alimentación ininterrumpida (UPS)


Deshabilitado, a menos que uses una UPS (SAI), en cuyo caso ponlo Automático.

76) Sistema de ayuda de tarjeta inteligente (ScardDrv)

A menos que uses tarjetas inteligentes, Deshabilítalo.

77) Sistema de sucesos COM+ (EventSystem)

Manual.

78) Tarjeta inteligente (ScardSvr)


A menos que uses tarjetas inteligentes, Deshabilítalo.

79) Telefonía (TapiSrv)


Si tienes un módem, ponlo Automático, si no, lo puedes Deshabilitar.

80) Telnet (TlnSvr)

Por razones de seguridad, Deshabilitado.

81) Temas (Themes)

Sencillamente es la apariencia de Windows XP.

Si te gusta la apariencia de XP, ponlo Automático. Si lo que te preocupa es la memoria y te vale con la apariencia de Windows 2000, entonces lo puedes Deshabilitar.

82) Windows Installer (MSIServer)

Administra la instalación y eliminación de aplicaciones.

Manual, para que se ejecute sólo cuando sea necesario.

Tutorial PHP





1. Iniciación a PHP


Conceptos básicos



El lenguaje PHP es un lenguaje de programación de estilo clásico, con esto quiero decir que es un lenguaje de programación con variables, sentencias condicionales, bucles, funciones.... No es un lenguaje de marcas como podría ser HTML, XML o WML. Está mas cercano a JavaScript o a C, para aquellos que conocen estos lenguajes.


Pero a diferencia de Java o JavaScript que se ejecutan en el navegador, PHP se ejecuta en el servidor, por eso nos permite acceder a los recursos que tenga el servidor como por ejemplo podría ser una base de datos. El programa PHP es ejecutado en el servidor y el resultado enviado al navegador. El resultado es normalmente una página HTML pero igualmente podría ser una pagina WML.



Al ser PHP un lenguaje que se ejecuta en el servidor no es necesario que su navegador lo soporte, es independiente del navegador, pero sin embargo para que sus páginas PHP funcionen, el servidor donde están alojadas debe soportar PHP



Nuestro primer PHP


La ventaja que tiene PHP sobre otros lenguajes de programación que se ejecutan en el servidor (como podrían ser los script CGI Perl), es que nos permite intercalar las sentencias PHP en las paginas HTML, es un concepto algo complicado de entender si no se ha visto nunca como funciona unas paginas PHP o ASP.

Vamos a ver un ejemplo sencillo para comprenderlo mejor. En azul está el código HTML y en rojo el código PHP. Seguiremos este criterio durante todo el manual.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>

<body>

Parte de HTML normal.
<BR><BR>

<?php
echo "Parte de PHP<br>";
for($i=0;$i<10;$i++)
{
echo "Linea ".$i."<br>";
}
?>

</body>
</html>

El código PHP ejecutado tiene dos partes: la primera imprime "Parte de PHP" y la segunda es un bucle que se ejecuta 10 veces de 0 a 9, por cada vez que se ejecuta se escribe una línea, la variable $i contiene el número de línea que se está escribiendo. No importa si no entiende muy bien el programa este ejemplo solo es para ilustrar como se intercala el código HTML y el código PHP


Variables

Una variable es un contenedor de información, en el que podemos meter números enteros, números decimales, carácteres... el contenido de las variables se puede leer y se puede cambiar durante la ejecución de una página PHP.

En PHP todas las variables comienzan con el símbolo del dólar $ y no es necesario definir una variable antes de usarla. Tampoco tienen tipos, es decir que una misma variable puede contener un número y luego puede contener carácteres.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$a = 1;
$b = 3.34;
$c = "Hola Mundo";
echo $a,"<br>",$b,"<br>",$c;
?>

</body>
</html>

En este ejemplo hemos definido tres variables, $a, $b y $c y con la instrucción echo hemos impreso el valor que contenían, insertando un salto de línea entre ellas.

Existen 2 tipos de variables, las variables locales que solo pueden ser usadas dentro de funciones y las variables globales que tienen su ámbito de uso fuera de las funciones, podemos acceder a una variable global desde una función con la instrucción
global nombre_variable;


2. Operadores en PHP



Aritmeticos


Los operadores de PHP son muy parecidos a los de C y JavaScript, si usted conoce estos lenguajes le resultaran familiares y fáciles de reconocer.

Estos son los operadores que se pueden aplicar a las variables y constantes numéricas.

Operador Nombre Ejemplo Descripción
+ Suma 5 + 6 Suma dos números
- Resta 7 - 9 Resta dos números
* Multiplicación 6 * 3 Multiplica dos números
/ División 4 / 9 Divide dos números
% Módulo 7 % 2 Devuelve el resto de dividir ambos números, en este ejemplo el resultado es 1
++ Suma 1 $a++ Suma 1 al contenido de una variable.
-- Resta 1 $a-- Resta 1 al contenido de una variable.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$a = 8;
$b = 3;
echo $a + $b,"<br>";
echo $a - $b,"<br>";
echo $a * $b,"<br>";
echo $a / $b,"<br>";
$a++;
echo $a,"<br>";
$b--;
echo $b,"<br>";
?>
</body>
</html>

</body>
</html>


Operadores de Comparación PHP



Los operadores de comparación son usados para comparar valores y así poder tomar decisiones.

Operador Nombre Ejemplo Devuelve cierto cuando:
== Igual $a == $b $a es igual $b
!= Distinto $a != $b $a es distinto $b
< Menor que $a < $b $a es menor que $b
> Mayor que $a > $b $a es mayor que $b
<= Menor o igual $a <= $b $a es menor o igual que $b
>= Mayor o igual $a >= $b $a es mayor o igual que $b


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$a = 8;
$b = 3;
$c = 3;
echo $a == $b,"<br>";
echo $a != $b,"<br>";
echo $a < $b,"<br>";
echo $a > $b,"<br>";
echo $a >= $c,"<br>";
echo $b <= $c,"<br>";
?>

</body>
</html>



Operadores Logicos


Los operadores lógicos son usados para evaluar varias comparaciones, combinando los posibles valores de estas.

Operador Nombre Ejemplo Devuelve cierto cuando:
&& Y (7>2) && (2<4) Devuelve verdadero cuando ambas condiciones son verdaderas.
and Y (7>2) and (2<4) Devuelve verdadero cuando ambas condiciones son verdaderas.
|| O (7>2) || (2<4) Devuelve verdadero cuando al menos una de las dos es verdadera.
or O (7>2) or (2<4) Devuelve verdadero cuando al menos una de las dos es verdadera.
! No ! (7>2) Niega el valor de la expresión.


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$a = 8;
$b = 3;
$c = 3;
echo ($a == $b) && ($c > $b),"<br>";
echo ($a == $b) || ($b == $c),"<br>";
echo !($b <= $c),"<br>";
?>

</body>
</html>


3. Instrucciones en PHP



Condicionales



Las sentencias condicionales nos permiten ejecutar o no unas ciertas instrucciones dependiendo del resultado de evaluar una condición. Las más frecuentes son la instrucción if y la instrucción switch.

Sentencia if ... else

<?php
if (condición)
{
Sentencias a ejecutar cuando la
condición es cierta.
}
else
{
Sentecias a ejecutar cuando la
condición es falsa.
}
?>







La sentencia if ejecuta una serie de instrucciones u otras dependiendo de la condición que le pongamos. Probablemente sea la instrucción más importante en cualquier lenguaje de programación.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$a = 8;
$b = 3;
if ($a < $b)
{
echo "a es menor que b";
}
else
{
echo "a no es menor que b";
}
?>

</body>
</html>

En este ejemplo la condición no es verdadera por lo que se ejecuta la parte de código correspondiente al else.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$posicion = "arriba";

switch($posicion) {
case "arriba": // Bloque 1
echo "La variable contiene";
echo " el valor arriba";
break;
case "abajo": // Bloque 2
echo "La variable contiene";
echo " el valor abajo";
break;
default: // Bloque 3
echo "La variable contiene otro valor";
echo " distinto de arriba y abajo";
}
?>

</body>
</html>

Con la sentencia switch podemos ejecutar unas u otras instrucciones dependiendo del valor de una variable, en el ejemplo anterior, dependiendo del valor de la variable $posicion se ejecuta el bloque 1 cuando el valor es "arriba", el bloque 2 cuando el valor es "abajo" y el bloque 3 si no es ninguno de los valores anteriores.



Bucles


Los bucles nos permiten iterar conjuntos de instrucciones, es decir repetir la ejecución de un conjunto de instrucciones mientras se cumpla una condición.

Sentencia while

<?php
while (condición)
{
intrucciones a ejecutar.
}
?>













Mientras la condición sea cierta se reiterará la ejecución de las instrucciones que están dentro del while.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Inicio<BR>
<?php
$i=0;
while ($i<10)
{
echo "El valor de i es ", $i,"<br>";
$i++;
}
?>

Final<BR>
</body>
</html>


En el siguiente ejemplo, el valor de $i al comienzo es 0, durante la ejecución del bucle, se va sumando 1 al valor de $i de manera que cuando $i vale 10 ya no se cumple la condición y se termina la ejecución del bucle.

<?php
for (inicial ; condición ; ejecutar en iteración)
{
intrucciones a ejecutar.
}
?>


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Inicio<BR>

<?php
for($i=0 ; $i<10 ; $i++)
{
echo "El valor de i es ", $i,"<br>";
}
?>

Final<BR>
</body>
</html>


La instrucción for es la instrucción de bucles más completa. En una sola instrucción nos permite controlar todo el funcionamiento del bucle.

El primer parámetro del for, es ejecutado la primera vez y sirve para inicializar la variable del bucle, el segundo parámetro indica la condición que se debe cumplir para que el bucle siga ejecutándose y el tercer parámetro es una instrucción que se ejecuta al final de cada iteración y sirve para modificar el valor de la variable de iteración.



Salida


Hasta ahora hemos usado la instrucción echo para realizar salida a pantalla, esta instrucción es bastante limitada ya que no nos permite formatear la salida. En esta página veremos la instrucción printf que nos da mucha más potencia.

Sentencia printf.

<?php
printf(cadena formato, variable1, variable2...);
?>













La cadena de formateo indica cómo se han de representar las valores que posteriormente le indicaremos. La principal ventaja es que además de poder formatear los valores de salida, nos permite intercalar texto entre ellos.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
printf("El numero dos con diferentes formatos: %d %f %.2f",2,2,2);
?>

</body>
</html>


La cadena de formato puede incluir una seria de carácteres especiales que indican como formatear las variables que se incluyen en la instrucción.

Elemento Tipo de variable
%s Cadena de carácteres.
%d Número sin decimales.
%f Número con decimales.
%c Carácter ASCII.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
$var="texto";
$num=3;
printf("Puede fácimente intercalar <b>%s</b> con números <b>%d</b> <br>",$var,$num);

printf("<TABLE BORDER=1 CELLPADDING=20>";
for ($i=0;$i<10;$i++)
{
printf("<tr><td>%10.d</td></tr>",$i);
}
printf("</table>";
?>

</body>
</html>



Manejo de Cadenas



Dado el uso del lenguaje PHP el tratamiento de cadenas es muy importante, existen bastantes funciones para el manejo de cadenas, a continuación explicaremos las más usadas.

1.- strlen(cadena). Nos devuelve el número de carácteres de una cadena.

2.- split(separador,cadena). Divide una cadena en varias usando un carácter separador.

3.- sprintf(cadena de formato, var1, var2...). Formatea una cadena de texto al igual que printf pero el resultado es devuelto como una cadena.

4.- substr(cadena, inicio, longitud). Devuelve una subcadena de otra, empezando por inicio y de longitud.

5.- chop(cadena). Elimina los saltos de línea y los espacios finales de una cadena.

6.- strpos(cadena1, cadena2). Busca la cadena2 dentro de cadena1 indicándonos la posición en la que se encuentra.

7.- str_replace(cadena1, cadena2, texto). Reemplaza la cadena1 por la cadena2 en el texto.


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<?php
echo strlen("12345","<br>";

$palabras=split(" ","Esto es una prueba";
for($i=0;$palabras[$i];$i++)
echo $palabras[$i],"<br>";

$resultado=sprintf("8x5 = %d <br>",8*5);
echo $resultado,"<br>";

echo substr("Devuelve una subcadena de otra",9,3),"<br><br>";

if (chop("Cadena nn " == "Cadena"
echo "Iguales<br><br>";

echo strpos("Busca la palabra dentro de la frase", "palabra","<br><br>";

echo str_replace("verde","rojo","Un pez de color verde, como verde es la hierba.","<br>";

?>

</body>
</html>


4. Funciones


Funciones




El uso de funciones nos da la capacidad de agrupar varias instrucciones bajo un solo nombre y poder llamarlas a estas varias veces desde diferentes sitios, ahorrándonos la necesidad de escribirlas de nuevo.

<?php
function Nombre(parametro1, parametro2...)
{
instrucción1;
instrucción2;
instrucción3;
instrucción4;

return valor_de_retorno;
}
?>









Opcionalmente podemos pasarle parámetros a las funciones que se trataran como variable locales y así mismo podemos devolver un resultado con la instrucción return valor; Esto produce la terminación de la función retornando un valor.

<?php

function media_aritmetica($a, $b)
{
$media=($a+$b)/2;
return $media;
}

echo media_aritmetica(4,6),"<br>";
echo media_aritmetica(3242,524543),"<br>";

?>


Librerías PHP


El uso de librerías es tremendamente útil, nos permiten agrupar varias funciones y variables en un mismo fichero, de manera que luego podemos incluir esta librería en distintas páginas y disponer de esas funciones fácilmente.

<?php
function CabeceraPagina()
{
?>

<FONT SIZE="+1">Esta cabecera estará en todas sus páginas.
</FONT><BR>
<hr>
<?
}

function PiePagina()
{
?>

<hr>
<FONT SIZE="-1">Este es el pie de página.</FONT><BR>
Autor: Joaquin Gracia
<?
}
?>

Ahora vamos a crear 2 páginas que usan la librería definida anteriormente para conseguir que las dos paginas tengan la misma cabecera y pie de pagina.

<?php

function media_aritmetica($a, $b)
{
$media=($a+$b)/2;
return $media;
}

echo media_aritmetica(4,6),"<br>";
echo media_aritmetica(3242,524543),"<br>";


5. Ejemplos prácticos


Formateo de Pagina


En este ejemplo vamos a usar el PHP y la capacidad de definir librerías para conseguir que todas nuestras páginas tengan el mismo formato de página, incluyendo las partes comunes en librerías. Así mismo modificando la librería modificaríamos tambien todas las páginas de una manera muy rápida.

libpagina.phtml

<?php
function CabeceraPagina()
{
?>
<FONT SIZE="+1">Esta cabecera estará en todas sus páginas.
</FONT><BR>
<hr>
<? }

function PiePagina()
{
?>
<hr>
<FONT SIZE="-1">Este es el pie de página.</FONT><BR>
Autor: Joaquin Gracia
<? }

function Indice()
{
?>
<A HREF="ejem06a.phtml">Pagina 1</A><BR>
<A HREF="ejem06a2.phtml">Pagina 2</A><BR>
<? } ?>


ejem06a.phtml


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php include("libpagina.phtml" ?>
<?php CabeceraPagina(); ?>
<TABLE>
<TR>
<TD>
<?php Indice() ?>
</TD>
<TD>
Esta es otra página<BR><BR>
completamente distinta<BR><BR>
pero comparte el pie y la cabecera con la otra.<BR><BR>
</TD>
</TR>
</TABLE>
<?php PiePagina(); ?>
</body>
</html>


ejem06a2.phtml

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<?php include("libpagina.phtml" ?>
<?php CabeceraPagina(); ?>
<TABLE>
<TR>
<TD>
<?php Indice() ?>
</TD>
<TD>
Página 1
<BR><BR><BR><BR><BR>

Contenido blalbl blalb alb<BR><BR>
más cosas...<BR><BR>

fin<BR><BR>
</TD>
</TR>
</TABLE>
<?php PiePagina(); ?>
</body>
</html>


Enlaces Externos


Con este ejemplo damos solución al problema de los enlaces externos y de forma que la web externa queda en la parte inferior del frame y así no se sale de nuestra web.


ejem06b.html

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>

<A HREF="ejem06b2.phtml?dire=http://www.tutorialphp.net">
www.tutorialphp.net</A><BR><BR>
<A HREF="ejem06b2.phtml?dire=http://www.terra.es">
www.terra.es</A>

</body>
</html>






ejem06a2.phtml
<!-- frames -->
<FRAMESET ROWS="100,*">
<FRAME NAME="arriba" SRC="ejem06b3.html" MARGINWIDTH="10" MARGINHEIGHT="10" SCROLLING="auto" FRAMEBORDER="0">
<FRAME NAME="abajo" SRC="<?php echo $dire ?>" MARGINWIDTH="10" MARGINHEIGHT="10" SCROLLING="auto" FRAMEBORDER="0">
</FRAMESET>


6. Procesado de formularios


Envio y Recepcion





El lenguaje PHP nos proporciona una manera sencilla de manejar formularios, permitiéndonos de esta manera procesar la información que el usuario ha introducido.


Al diseñar un formulario debemos indicar la página PHP que procesará el formulario, así como en método por el que se le pasará la información a la página.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
Introduzca su nombre:
<FORM ACTION="procesa.phtml" METHOD="GET">
<INPUT TYPE="text" NAME="nombre"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>











Al pulsar el botón Enviar el contenido de cuadro de texto es enviado a la página que indicamos en el atributo ACTION de la etiqueta FORM.


En versiones anteriores a 4.2.0 PHP creaba una variable por cada elemento del FORM, esta variable creada tenía el mismo nombre que el cuadro de texto de la página anterior y el valor que habíamos introducido. Pero por razones de seguridad a partir de entonces para acceder a las variables del formulario hay que usar el array de parámetros $_POST[] o $_GET[] dependiendo del método usado para enviar los parámetros.


En este ejemplo se ha creado una entrada en el array $_GET[] con el índice 'nombre' y con el valor que haya introducido el navegante.


<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
El nombre que ha introducido es: <?php echo $_GET['nombre'] ?>
<br>
</body>
</html>



Método GET Y POST



En la página anterior hemos comentado que los datos de un formulario se envía mediante el método indicado en el atributo METHOD de la etiqueta FORM, los dos métodos posibles son GET y POST.


La diferencia entre estos dos métodos radica en la forma de enviar los datos a la página, mientras que el método GET envía los datos usando la URL, el método POST los envía por la entrada estándar STDIO.




<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>

<FORM ACTION="procesa2.phtml" METHOD="GET">
Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR>
Introduzca sus apellidos:<INPUT TYPE="text" NAME="apellidos">
<BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
<FORM ACTION="procesa2.phtml" METHOD="POST">
Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR>
Introduzca sus apellidos:<INPUT TYPE="text" NAME="apellidos"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de procesado de formularios</H1>
El nombre que ha introducido por GET es: <?php echo $_GET['nombre']," ",$_GET['apellidos'] ?><br>
El nombre que ha introducido por POST es: <?php echo $_POST['nombre']," ",$_POST['apellidos'] ?>
<br>
</body>
</html>


El resultado final es el mismo, solo que con el método GET podemos ver los parámetros pasados ya que están codificados en la URL.


Envío de Email


PHP nos ofrece la posibilidad de enviar emails de una manera sencilla y fácil, para ello el lenguaje nos proporciona la instrucción mail( )


<?php
mail(destinatario, tema, texto del mensaje);
?>

En el parámetro destinatario pondremos la dirección de email
a donde se enviará el mensaje, en el parámetro tema el tema
o subject del mensaje y el parámetro texto del mensaje el
cuerpo del mensaje en formato texto plano.

Existe una sintaxis extendida de la instrucción mail( ) que
nos permite añadir información adicional a la cabecera del mensaje.










<?php
mail(destinatario, tema, texto del mensaje, información adicional de cabecera);
?>

En la información de cabecera podremos incluir parámetros adicionales al mensaje como Reply-To:, From:, Content-type:... que nos permiten tener un mayor control sobre el mensaje.

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de envio de email</H1>
Introduzca su direccion de email:
<FORM ACTION="email.phtml" METHOD="GET">
<INPUT TYPE="text" NAME="direccion"><BR><BR>
Formato: <BR>
<INPUT TYPE="radio" NAME="tipo" VALUE="plano" CHECKED> Texto plano<BR>
<INPUT TYPE="radio" NAME="tipo" VALUE="html"> HTML<BR><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</body>
</html>

email.phtml

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de envio de email</H1>
<?
$direccion=$_GET['direccion'];
$tipo=$_GET['tipo'];

if ($direccion!=""{
if ($tipo=="plano"{
// Envio en formato texto plano

mail($direccion,"Ejemplo de envio de email","Ejemplo de envio de email de texto planonnTutorialPHP.nhttp://www.tutorialphp.net/n Manuales para desarrolladores web.n","FROM: Pruebas <webmaster@hotmail.com>n";
} else {
// Envio en formato HTML
mail($direccion,"Ejemplo de envio de email","<html><head><title>TutorialPHP. Manual de PHP</title></head><body>Ejemplo de envio de email de HTML<br><br>TutorialPHP.<br>http://www.tutorialphp.net/<br> <u>Manuales</u> para <b>desarrolladores</b> web.</body></html>","Content-type: text/htmln", "FROM: Pruebas <webmaster@hotmail.com>n";
}
echo "Se ha enviado un email a la direccion: ",$direccion," en formato <b>",$tipo,"</b>.";
}
?>
<br>
</FORM>
</body>
</html>




7. Bases de Datos MySQL


Crear la base de datos MySQL



Para la realización de este curso sobre PHP con acceso a base de datos hemos elegido la base de datos MySQL por ser gratuita y por ser también la mas empleada en entornos UNIX, para lo cual el servidor donde tenemos alojadas las páginas nos tiene que proporcionar herramientas para crearla o acceso al Telnet para que la creemos por nosotros mismos.


El comando para crear una base de datos MySQL es el siguiente: mysqladmin -u root create base_datos


Con este comando conseguimos crear la una base de datos en el servidor de bases de datos de nuestro servidor.


Una vez conseguido esto debemos crear las tablas en la base de datos, la descripción de las tablas contienen la estructura de la información que almacenaremos en ellas. Para lo cual usaremos en lenguaje de consultas SQL común para todas las bases de datos relacionales.


En este ejemplo creamos una tabla llamada prueba con 3 campos: un campo identificador, que nos servirá para identificar unívocamente una fila con el valor de dicho campo, otro campo con el nombre de una persona y por último un campo con el apellido de la persona.






Para crear la tabla puede usar la herramienta de administración de MySQL de su servidor web o puede escribir un fichero de texto con el contenido de la sentencia SQL equivalente y luego decirle al motor de base de datos que la ejecute con la siguiente instrucción: mysql -u root base_datos <prueba.sql

prueba.sql


CREATE TABLE prueba (
ID_Prueba int(11) DEFAULT '0' NOT NULL auto_increment,
Nombre varchar(100),
Apellidos varchar(100),
PRIMARY KEY (ID_Prueba),
UNIQUE ID_Prueba (ID_Prueba)


Insertar registros a MySQL


Una vez que nos hemos conectado con el servidor de bases de datos, ya podemos realizar consultas a las tablas de la base de datos.

Para ello usaremos un formulario y en el ACTION del FORM <FORM ACTION="programaPHP"> indicaremos que debe ser procesado una pagina PHP, esta página lo que hará será introducir los datos del formulario en la base de datos.

ejem07d.phtml

<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
<H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1>
<FORM ACTION="procesar.phtml">
<TABLE>
<TR>
<TD>Nombre:</TD>
<TD><INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30"></TD>
</TR>
<TR>
<TD>Apellidos:</TD>
<TD><INPUT TYPE="text" NAME="apellidos" SIZE="20" MAXLENGTH="30"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="accion" VALUE="Grabar">
</FORM>
<hr>

<?php
include("conex.phtml";
$link=Conectarse();
$result=mysql_query("select * from prueba",$link);
?>

<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR><TD>&nbsp;<B>Nombre</B></TD> <TD>&nbsp;<B>Apellidos</B>&nbsp;</TD></TR>

<?php
while($row = mysql_fetch_array($result)) {
printf("<tr><td>&nbsp;%s</td> <td>&nbsp;%s&nbsp;</td></tr>", $row["Nombre"], $row["Apellidos"]);
}
mysql_free_result($result);
mysql_close($link);
?>

</table>
</body>
</html>

procesar.phtml

<?php
include("conex.phtml";
$link=Conectarse();
$nombre=$_GET['nombre'];
$apellidos=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);

header("Location: ejem07d.phtml";
?>



La primera página PHP ejem07d.phtml es un formulario que nos permite introducir nombre y apellido para añadirlo a la base de datos, seguido de una consulta que nos muestra el contenido de la tabla prueba. El formulario llama a la pagina procesar.phtml que añadirá los datos a la tabla.

La segunda página procesar.phtml se conecta a la base de datos y añade un nuevo registro con la instrucción insert del lenguaje de base de datos SQL. Una vez el registro se ha añadido se vuelve a cargar la página ejem07d.phtml


8. Seguridad




Restringir acceso PHP

En esta sección vamos a explicar cómo podemos restringir el acceso a según qué páginas, para que solo las personas autorizadas puedan acceder a ciertas partes del nuestro sitio web.

Atención: El acceso restringido a páginas usando las variables globales $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE solo funciona si PHP ha sido instalado como un módulo de Apache, si ha sido instalado como un CGI los ejemplos de ésta sección no funcionarán.

Para conseguir la autentificación en las páginas usaremos el sistema de autentificación del protocolo HTTP, este sistema se basa en las variables globales $PHP_AUTH_USER y $PHP_AUTH_PW.

1.- $PHP_AUTH_USER. Nombre de usuario introducido.
2.- $PHP_AUTH_PW. Contraseña introducida.


Para que el navegador nos muestre la ventana de petición de nombre de usuario y contraseña basta con enviar la siguiente cabecera:

<?php
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
else {
echo "Ha introducido el nombre de usuario: $PHP_AUTH_USER<br>";
echo "Ha introducido la contraseña: $PHP_AUTH_PW<br>";
}
?>


Esto provoca que se muestre la ventana de nombre de usuario y contraseña y los datos introducidos se asignen a las variables $PHP_AUTH_USER y $PHP_AUTH_PW.
A partir de aquí realizaremos las comprobaciones necesarias para asegurarnos que los datos introducidos son los correctos.

En el siguiente ejemplo pediremos autorización y comprobaremos si el nombre de usuario es Joe y la contraseña 123, si es así tendremos acceso al resto de la página.

<?php
if (($PHP_AUTH_USER!="Joe" || ($PHP_AUTH_PW!="123") {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B>.
</body>
</html>


Distinción de usuarios PHP


En la anterior página todo el mundo que tenía acceso a la parte restringida entraba con el mismo nombre de usuario y contraseña, esto evidentemente no es una buena solución, es mejor que cada persona tenga un nombre de usuario y contraseña, ya que de esta forma podemos inhabilitar a un usuario sin ver comprometida la seguridad de nuestro sitio.

En esta página veremos la forma de realizar esto, teniendo un fichero separado con los nombres de usuario y las contraseñas válidas. Dicho fichero podría tener el siguiente formato: nombre_de_usuario|contraseña. Por ejemplo:

passwords.txt
Joe|1235
Pedro|qwer
Noe|Gty45e
kermit|rwe4v


En este ejemplo se pide la autorización al comienzo de la página si no se ha establecido con anterioridad y se comprueba con el fichero de contraseñas que hemos llamado passwords.txt, si el nombre de usuario y contraseña coincide con alguna entrada del fichero se nos permite ver el resto de la página.

<?php //
if (!isset($PHP_AUTH_USER)) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}

$fich = file("passwords.txt";
$i=0; $validado=false;
while ($fich[$i] && !$validado) {
$campo = explode("|",$fich[$i]);
if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
$i++;
}

if (!$validado) {
header('WWW-Authenticate: Basic realm="Acceso restringido"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required.';
exit;
}
?>
<html>
<head>
<title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php echo $PHP_AUTH_USER?>.
</body>
</html>



9. Sesiones


Que Son??


Si existe una consulta repetida en las listas de PHP, es la relativa al uso de las sesiones. El uso de sesiones es un método ampliamente extendido en cualquier aplicación de cierta entidad. Básicamente una sesión es la secuencia de páginas que un usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.

El término sesión en PHP, session en inglés, se aplica a esta secuencia de navegación, para ello crearemos un identificador único que asignamos a cada una de estas sesiones de navegación. A este identificador de sesión se le denomina, comúnmente, como la sesión.

El proceso en cualquier lenguaje de programación podría ser algo así:
Existe una sesión?
Si existe la retomamos
Si no existe creamos una nueva
Generar un identificador único

Y para que no perdamos el hilo de la navegación del usuario deberemos asociar esta sesión a todas las URLs y acciones de formulario. Podemos también crear un cookie que incluya el identificador de sesión, pero es conveniente recordar que la disponibilidad o no de las cookies depende del usuario, y no es conveniente fiarse de lo que un usuario pueda o no tener habilitado.

Lo contado hasta ahora es teoría pura y es aplicable a cualquier lenguaje de programación C, Perl, etc. Los que programamos en PHP4 tenemos la suerte de que toda la gestión de sesiones la hace el mismo PHP.

Por lo tanto lo comentado a partir de aquí es solo aplicable a PHP4. Si aún desarrollas PHP3, tendrás que crear tus propias librerías de gestión de sesiones o recurrir a alguna de las existentes, como la de PHPLIB


Inicializacion


Para utilizar sesiones en PHP lo primero es inicializarlas. Podemos hacerlo explícitamente, mediante la función session_start(), o al registrar una variable en una sesión mediante session_register('miVariable'). En ambos casos se crea una nueva sesión, si no existe, o se retoma la sesión actual. Veamos un sencillo ejemplo:

<?php
session_start();
echo "He inicializado la sesión";
?>


Esta es la forma más básica, si el usuario tiene los cookies activados, PHP habrá insertado de forma automática la sesión y ésta será pasada de una página a otra sin hacer nada más. Desde un punto de vista práctico la sesión es operativa, pero no vemos nada. Podemos obtener la sesión en cualquier momento mediante la función session_id(). Inserta en las sucesivas páginas la siguiente línea para ver si la sesión está disponible:
<?php
session_start();
echo 'La sesión actual es: '.session_id();
?>




En este caso session_start() comprueba en los cookies que existe una sesión y continua con ella, session_id() devuelve el identificador actual.


Sesiones PHP, Un ejemplo


Veamos otro ejemplo que, tal vez, te lo aclare un poco más:


<?php
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale: '.++$_SESSION['contador']. '</a>';
?>


Como dije anteriormente la sesión se crea o recoge mediante session_start(), o también cuando se registra una variable de sesión mediante session_register().

Si no has utilizado nunca las sesiones, el concepto de variable de sesión, puede resultar un poco abstracto. Básicamente es una variable, como cualquiera de las que gestiona PHP4, pero que reside en un espacio específico en el servidor, junto con el identificador de sesión, y que pertenece únicamente a un usuario.

En nuestro ejemplo anterior, registramos la variable $contador en la primera línea del script. En la segunda línea, entre otras cosas, cada vez que recarguemos la página o hagamos click sobre el enlace, el valor de $contador se incrementará en 1.

En esta línea hacemos uso de la variable reservada $PHP_SELF, que hace referencia al propio script en ejecución y una constante propia de PHP4, $SID, que contiene el nombre de la sesión y el identificador de la misma.

Podemos averiguar también el nombre de la sesión, o modificarlo, mediante la función session_name(). Veamos una prueba práctica:

<?php
session_name('misesion');
session_register('contador');
echo '<a href="'.$PHP_SELF.'?'.SID.'">Contador vale: '.++$_SESSION['contador'].'</a><br>';
echo 'Ahora el nombre es '.session_name().' y la sesión '.$misesion.'<br>';
?>


La asignación del nombre de sesión debe realizarse antes que ninguna otra función con sesiones, antes que session_start() o session_register().


Sesiones PHP, Error común



Uno de los errores más comunes cuando se utilizan sesiones es dejar líneas en blanco antes de la inicialización de PHP o enviar alguna salida a la pantalla. Para probarlo crea una línea en blanco o con cualquier cosa antes de <?php.

Si tienes los cookies activados, te encontrarás un error de este tipo:

Warning: Cannot send session cookie - headers already sent by (output started at /home/session.php:2) in /home/session.php on line 4

PHP está informando de que no puede activar los cookies en el navegador del usuario, porque las cabeceras ya han sido enviadas. Simplemente por la existencia de una línea en blanco. Como medida práctica, no dejes espacios ni antes del inicio del script, ni después de la finalización. Te ahorrará muchos disgustos.









Si después de todo lo comentado aún no entiendes para que sirven las sesiones, veamos un ejemplo práctico. Imagina que quisieras crear un sistema de cesta de la compra...


10. Cookies


Que Son?


La principal utilidad de las cookies (galletas) es la de solventar el problema de la falta de estado en la navegación a través de las paginas web.

Con las cookies, pequeñas porciones de información se quedan registradas en el navegador permitiendo identificar a este a través de diferentes páginas de un mismo sitio e incluso durante visitas entre distintos días.

Realmente las cookies no son mas que cadenas de texto que son enviadas desde el servidor al cliente (navegador) y almacenadas en este, luego el navegador envía estas cookies al servidor permitiendo así la identificación del cliente en el servidor.











Funcionamiento

La cookie es enviada al navegador desde el servidor y si este la acepta permanece en él.


Las páginas piden la cookie al navegador...


El navegador las envía, permitiendo la identificación del usuario por parte del servidor.



Cookies PHP, Cómo usarlas









El manejo de cookies en PHP se realiza mediante el uso de la función setcookie, esta función esta disponible a partir de la versión 3 de PHP.

int setcookie (string Nombre [, string Valor [, int Expire [, string Path [, string Dominio [, int Secure]]]]])
Setcookie() define una cookie que es enviada junto con el resto de la información de la cabecera(header). Las cookies deben ser enviadas antes de cualquier tag de html, por lo tanto deberemos realizar la llamada a estas funciones antes de cualquier tag <HTML> o <HEAD>. Esta es una restricción de las cookies no de PHP.

Todos los argumentos excepto el nombre son opcionales.

* Nombre. Nombre de la cookie. Si creamos una cookie solamente con el nombre, en el cliente se eliminara la cookie que exista con ese nombre. También podemos reemplazar cualquier argumento con una cadena vacía ("".

* Value.
Valor que almacenará la cookie en el cliente.

* Expire. El argumento expire es un argumento entero que indica la hora en que se eliminara la cookie en el formato de hora que devuelven las funciones UNIX time() y mktime(). Normalmente se usa time() + N. segundos de duración, para especificar la duración de una cookie.

* Path. Subdirectorio en donde tiene valor la cookie.

* Dominio. Dominio en donde tiene valor la cookie. Si ponemos como dominio www.domain.com la cookie no se transmite para domain.com, mientras que si ponemos domain.com la cookie se transmite tanto para domain.com como para www.domain.com

* Secure. El argumento secure indica que la cookie solo se transmitirá a través de una conexión segura HTTPS.

setcookie("usuario", "Luis", time()+3600,"/","tutorialphp.net";
En este ejemplo establecemos una cookie de nombre usuario que contiene el valor Luis, que dura 1 hora (3600 segundos) válida para todo el dominio tutorialphp.net


11. PHP Orientado a Objetos


PHP Orientado a Objetos, ¿Qué es?


Siglas de Programacion Orientada a Objetos (OOP en ingles - Object Oriented Programming - ) es una variante de programacion que permite reutilizar gran parte del codigo, lo hace mas estetico y legible ya que esta mas orientado a la logica humana, ademas de ser muy util en proyectos grandes.En proyectos con varios programadores, es posible asignar clases especificas que hagan un trabajo especifico a cada programador, y este desarrollarla independientemente de los avances de los demas ya que los objetos son independientes unos de otros, esto hara mas rapido y practico el desarrollo del proyecto.

OOP en PHP

PHP desde su version 3.0 soportaba la sintaxis de la OOP sin embargo en ese tiempo (y un poco ahora) carecia de todas sus caracteristicas.

A este tiempo PHP soporta todo lo que un lenguaje orientado a objetos en teoria deberia soportar:
* Encapsulamiento
* Tipos Abstractos de Datos y ocultamiento de la Información
* Herencia
* Polimorfismo

PHP no es un lenguaje 100% orientado a objetos sin embargo los soporta, por que no sacar provecho de eso. Para comprender la POO, debemos comprender las partes que la conforman:

Qué son las clases?

La clase es una plantilla que usamos para crear objetos, al crear un objeto de una clase se dice que es una instancia de esa clase.Los objetos en php se crean con la palabra reservada new.

<?php
class Ejemplo
{
//Constructor
function Ejemplo()
{

}

}

$ob = new Ejemplo();
?>


Aqui la variable $ob seria una instancia de la clase Ejemplo.

Constructor
El constructor es el metodo que es llamdo automaticamente al crear una instancia de la clase, el constructor lleva el mismo nombre de la clase, (aunque en la version de 5 de PHP sera especificado como _constructor ), el constructor no debe retornar ningun valor y es unico (distintamente a C plus).Pero bien, para que una clase sea util necesita metodos y atributos:

Metodos
los metodos (tambien operaciones) no son mas que un tipo de funciones propias de la clase, se manejan igual, reciben parametros, desarrollan un proceso y devuelven ( o no ) un valor, los metodos se definen con la palabra reservada:

<?php

class Ejemplo {

function Ejemplo()
{
//Do nothing...
}

function MuestraNombre($nombre)
{
echo "El nombre es " . $nombre;
}
}

$obj = new Ejemplo();

$obj->MuestraNombre('Ing_Amc');

?>

Esto es una clase con un simple metodo que muestra el valor de su unico parametro programado, el ejemplo daria como resultado:

El nombre es Ing_Amc