Copy Link
Add to Bookmark
Report
Black Lodge - Revista Digital No. 1
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
P010101b 01 1010 d0101010 01 01
01 100 10 010101 10 0 10 10
10 00 01 10 10 10 01 01
01010d 10 01 01 01 10.01
10101P 01 10101010 10 0101.
01 00 10 01010101 01 10 10
10 010 01 01 10 10 10 0 01 01
d101010d 10101010 01 01 b1010101 10 10
xx .xxxxxx. xxxxxxx. .xxxxxx. .xxxxxx.
xx xxxxxxxx xx .xx xxxxxxxx xxxxxxxx
xx xx xx xx xx xx xx
xx xx xx xx xx xx :xxx xxxx:
xx xx xx xx xx xx :xxx xxxx:
xx xx xx xx xx xx xx xx
xx xx xxxxxxxx xx .xx xxxxxxxx xxxxxxxx
xxxxxxxx .xxxxxx. Xxxxxxx. .xxxxxx. .xxxxxx.
M A G A Z I N E
*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
Revista Digital No. 1
Sitio Oficial de Descarga:
http://blacklodge.8k.com
Distribuidores y Sitios de Promocion:
http://www.vanhackez.com
http://www.dreamers.com/fondoperdido
CONTENIDO:
---EDITORIAL---
---JAVA---
---PROTOCOLO WAV---
---RESOLVER UNA ECUACION LINEAL CON DOS INCOGNITAS---
---TRUCOS DE WORD 97---
---INTRODUCCION A PYTHON---
---FIBRA OPTICA---
* Se han suprimido acentos y la enie por ~ para hacer un poco
mas compatible este material con cualquier editor de textos.
---EDITORIAL---
Bienvenidos a el primer numero de BLACK LODGE, la Ezine que busca abrir las
puertas del conocimiento informatico y cientifico. Esta primera edicion
surgio debido a la inquietud por expresar y compartir mis conocimientos a
lo largo de este tiempo de dedicarme a la informatica. Tuve la fortuna de
encontrarme con Ezines como SET, la cual imprimi y le puse un engargolado
de metal con pasta de plastico. Me parecio bien tener a la mano material
como ese, el cual podia leer en cualquier lugar. Asi que si te parece buena
esta publicacion, puedes hacer lo mismo y compartirla con tus amigos, tratare
de esforzarme para lograr algo de calidad.
Debo aceptar que esta Ezine no es de nivel alto, al contrario, sirve para
iniciar a todos aquellos que quieren hacer algo que valga la pena con su
computadora. Aclaro que el material contenido aqui es realizado con fines
educativos exclusivamente. Dedico esta Ezine a las personas que no tienen
una carrera en Sistemas o Informatica, pero que saben mas que cualquier
ingeniero debido a su dedicacion. Toda mi inspiracion se la debo a mi esposa,
a quien dedico mis triunfos. El nombre de Black Lodge proviene de una
cancion de el grupo Anthrax. Me gusto el nombre y creo que esa musica esta
presente en esta Ezine. Cabe aclarar que pueden existir temas de nivel muy
basico como tambien temas avanzados o que requieren conocimientos previos.
No te preocupes, aqui veras de todo, es por eso que esta Ezine puede ser
leida por todo mundo. BIENVENIDO.
---JAVA---
En este articulo les dire los verdaderos primeros pasos para
trabajar con el JDK de Sun, porque no es tan facil como
parece.
TU VERDADERA PRIMER TAZA CALIENTE DE JAVA
(Usaremos el JDK, Java Development Kit version 1.3.0_02)
Que necesitamos para comenzar?
Primeramente necesitas bajar el JDK y tener un editor de textos,
puede ser desde el edit.exe de el DOS (lo recomiendo mucho para
escribir codigo, es el mejor) o el block de notas del Windows,
incluso el wordpad, guardando la informacion en modo solo texto,
el chiste es que no meta texto enriquecido.
Despues de bajar el JDK, nos encontramos con que no hay un entorno
para comenzar a programar, (donde quedaron los accesos directos?)
esto es porque podemos hacerlo en un editor comun y corriente,
guardar el texto como:
"Programa1.java" (incluyendo las comillas) y compilarlo.
Despues lo ejecutamos con java.
Para compilarlo, usamos el programa javac.exe para que nos
genere el .class que es la aplicacion, la cual ejecutamos
con el programa java.exe que se encuentra en nuestro
directorio bin. Es importante saber que necesitamos darle las
rutas adecuadas tanto del compilador como del archivo .java que
se va a compilar, es por eso que recomiendo usar un archivo por
lotes que haga nuestro trabajo.
Asi estan las cosas como yo las hago:
En el explorador de windows, ver, opciones de carpeta,
pesta~a tipo de archivo, buscamos el Archivo java, decimos
que lo abra por default con nuestro editor de textos favorito.
Podemos agregar (solo como una opcion) en editar, nuevo,
decimos que lo abra con el archivo javac.exe dandole la ruta
de este programa, para que al darle click con el boton derecho,
nos muestre la opcion que compila el archivo, esto en caso de que
quisieramos saber si manda errores al compilar, de hecho podemos
cambiarle el icono a los .java, yo le puse un icono de un foco.
(Cuando cambias icono en propiedades, examinar, escribe pifmgr.dll).
Lamentablemente no se alcanza a ver cuales errores fueron,
solo nos damos cuenta que no genera el .class, asi que mejor
utiliza lo siguiente.
Creamos un archivo por lotes, el mio es j.bat como sigue:
@echo off
echo "ESTE PROGRAMA COMPILA PROGRAMAS EN JAVA, Espera unos Segundos..."
echo "Compilando..."
cd c:\java
c:\jdk1.3.0_02\bin\javac Hola.java
echo "YA ESTA COMPILADO EL ARCHIVO..."
pause
cls
c:\jdk1.3.0_02\bin\java Hola
cd c:\windows
pause
cls
Como te puedes dar cuenta, para cada aplicacion debemos modificar
nuestro texto para que aplique a dicho proyecto, te aseguro que es
la manera mas comoda, sobre todo cuando al compilar tenemos errores.
Yo lo tengo guardado en la carpeta windows, asi cuando abro una ventana
DOS, solo escribo "j", le doy enter y listo.
Es conveniente tambien tener un archivo por lotes aparte, el cual
solo compile y no ejecute el programa, en caso de errores (otra vez,
solo por recomendacion), especialmente si quieres hacer applets.
Yo utilizo este metodo porque programo en Java en mis ratos libres
en el trabajo y no quiero modificar el PATH.
La Programacion en Java se basa en cinco caracteristicas basicas:
* Todo es un objeto.
Cada elemento del problema debe ser modelizado como un objeto.
Los objetos en la programacion, buscan visualizar mejor los
elementos de los problemas.
* Un programa es un conjunto de objetos diciendose entre si que deben
hacer por medio de mensajes. Cuando necesitas que un objeto haga
algo le mandas mensajes. Mas concretamente, ejecutas un metodo de
dicho objeto poniendo el nombre del objeto separado por un punto de
lo que va a hacer y agregando unos parentesis para distinguir que es
una accion (en los parentesis puede haber parametros).
* Cada objeto tiene su propia memoria, que llena con otros objetos.
Cada objeto puede contener otros objetos.
De este modo se puede incrementar la complejidad del programa,
pero detras de dicha complejidad sigue habiendo simples objetos.
* Todo objeto tiene un tipo. En jerga de POO, cada objeto es una
instancia (un caso particular) de una clase (el tipo general).
Lo que distingue a una clase de otra es la respuesta a la
pregunta: ®que mensajes puedes recibir?
* Todos los objetos de un determinado tipo pueden recibir
los mismos mensajes. Por ejemplo, dado que un objeto de
tipo Gato es tambien un objeto de tipo Animal, se puede hacer
codigo pensando en los mensajes que se mandan a un animal y
aplicarlo a todos los objetos de ese tipo, sin pensar si son
gatos o no.
Por ejemplo, supongamos que tenemos la clase Interruptor cuyo
interfaz define los metodos apagar() y encender(). Entonces hacemos
lo siguiente:
Interruptor i = new Interruptor();
i.encender();
En Java, todo lo que hagamos sera programar clases. Cualquier programa
sera una clase que a su vez podra hacer uso de una, dos, tres o mas
clases. (Nunca olvides la frase DIVIDE Y VENCERAS).
Vamos a analizar el siguiente programa:
public class HolaMundo {
public static void main(String[] args) {
System.out.println("Hola, mundo");
}
}
Hay que resaltar que hemos especificado que la clase HolaMundo
sea publica (public). Con esto cambiamos la accesibilidad de
la clase. Podemos hacerla publica, de modo que todo el mundo
pueda acceder a ella, sus propiedades y metodos.
Podemos hacerla privada (private), que impide que nadie pueda
acceder a la misma o protegida (protected), de modo que nadie,
excepto sus clases heredadas, tienen permiso de acceso.
Por defecto una clase permite el acceso solo a miembros de
su mismo paquete (package), que es el equivalente en Java a
las librerias.
Restricciones para una clase publica:
* Solo puede haber una clase publica por fichero.
* El fichero debe llamarse igual que dicha clase publica.
Despues nos encontramos con un metodo con varias caracteristicas.
Es publico. Es estatico, es decir que solo habra un miembro de
este tipo en la memoria. Como es una funcion, debemos de poner
el tipo de valor de retorno, en este caso no necesitamos dicho
valor, entonces lo ponemos como void (ninguno).
El metodo se llama main (principal) el cual sera el primero en
ejecutarse siempre al iniciar un programa. Recibe un vector de
cadenas que recibe los parametros que haya podido introducir el
usuario al programa en la linea de comandos.
La tercera linea es donde hace algo el programa. Llamamos a una
funcion del sistema. Entre las librerias que ofrece Java, existe
una que se incluye por defecto en todos los programas,
es java.lang. Entre las clases disponibles en la misma esta la
clase estatica System, uno de cuyos miembros es out, uno de
cuyos metodos es println. Navegando entre la ayuda de Java podemos
comprobar todo esto. Este metodo recibe como parametro una cadena
que se encargara de escribir en pantalla.
Los comentarios en Java son los mismos que en C.
Se utiliza // para comentarios de una sola linea y /* para abrir
un comentario y */ para cerrarlo ocupando varias lineas.
Tenemos un tercer comentario que es caracteristico de Java, el /**
que abre un comentario y se cierra de la misma forma con */.
Con este tipo de comentarios podemos documentar a html con javadoc,
reduciendo tiempo en esta tarea.
TIPOS DE DATOS
En Java todo lo que se mueve es un objeto... excepto los tipos de
datos basicos, es decir, los numeros enteros, reales, los caracteres,
los valores logicos, etc. Todo lo demas seran objetos o, mejor dicho,
referencias a objetos. Son los unicos valores que se crean sin
utilizar el operador new, que veremos mas adelante.
Son los siguientes:
boolean valor logico 1 bit
char caracter 16 bit
byte entero muy peque~o 8 bit
short entero peque~o 16 bit
int entero normal 32 bit
long entero grande 64 bit
float real precision simple 32 bit
double real precision doble 64 bit
void tipo vacio ------
Ponerle valor a variables al declararlas con un tipo de dato
no es necesario, especialmente porque en Java todos tienen un
valor por defecto (0 en los numeros, false en los booleanos y
el caracter numero cero).
LITERALES
Los literales son el mecanismo utilizado para expresar un valor
constante. Java utiliza cinco tipos de elementos: enteros, reales
en coma flotante, booleanos, caracteres y cadenas:
Enteros 21, 0xDC
Reales 3.14, 2e12
Booleanos true, false
Caracteres 'x', \t, u0234
Cadenas "Esto es una cadena"
Conviene fijarse en que, mientras los caracteres se expresan
encerrados en comillas simples, las cadenas lo hacen en comillas
dobles.
IDENTIFICADORES
Un identificador es un nombre que le damos a un elemento, es decir,
una clase, un metodo, una propiedad... Java distingue entre mayusculas
y minusculas y los identificadores pueden comenzar por una letra,
un subrayado o un simbolo de dolar, siendo los siguientes caracteres
letras o digitos. Por ejemplo, son identificadores validos:
contador
_nombre_usuario
$dinero
OPERADORES
Se manejan los mismos que en C:
* Multiplicacion
% Resto de una division entera
+ Suma
- Resta
++ Incremento
-- Decremento
Donde:
a = 1;
b = ++a; //a=2, b=2
a = 1;
b = a++; //a=2, b=1
Es decir, incrementa su valor despues de la asignacion.
Dicho operador se puede combinar con operadores aritmeticos para dar
los siguientes de modo que se realice una operacion antes de asignar.
Asi, por ejemplo:
a /= b
Es lo mismo que a=a/b. Existen esos operadores combinados para la
suma (+=), resta (-=), division (/=), multiplicacion (*=) y resto (%=).
Los operadores de comparacion toman dos cantidades numericas y las
comparan, devolviendo un valor logico que sera true si la comparacion
fue exitosa y false en caso contrario.
== Igualdad
!= Desigualdad
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
Operadores logicos
! Negacion
&& Y Logico (and)
|| O Logico (or)
Separadores
() Contienen listas de parametros, tanto en la definicion de
un metodo como en la llamada al mismo. Tambien se utilizan para
modificar la precedencia en una expresion, contener expresiones
para control de flujo y realizar conversiones de tipo.
{} Se utilizan para definir bloques de codigo, definir ambitos y
contener los valores iniciales de los vectores.
[] Se utiliza tanto para declarar vectores o matrices como para
referenciar valores dentro de los mismos.
; Separa sentencias.
, Separa identificadores consecutivos en la declaracion de variables
y en las listas de parametros. Tambien se utiliza para encadenar
sentencias dentro de una estructura for.
. Separa un nombre de propiedad o metodo de una variable de referencia.
Tambien separa nombre de paquete de los de un subpaquete o una clase.
CONTROL DE FLUJO
if (expresion booleana)
sentencia
else
sentencia
switch (expresion) {
case valor1: sentencia; break;
case valor2: sentencia; break;
case valor3: sentencia; break;
// ...
default: sentencia;
}
while (expresion booleana)
sentencia
do
sentencia;
while (expresion booleana)
for (inicializacion; expresion booleana; paso)
sentencia
Por ultimo, conviene recordar el uso de return.
Se utiliza para devolver un valor de retorno en los
metodos (en caso de que estos no devuelvan void).
Pero tambien conviene destacar que en el momento que
se llega a return, el programa sale del metodo que se
este ejecutando.
---PROTOCOLO WAV---
No hay duda que los nuevos dispositivos tecnologicos son mas potentes
y livianos cada vez, permitiendo que nuestra comunicacion sea cada vez
mas eficaz.
Internet es una forma de comunicacion universal que captura la atencion
de miles de personas diariamente y gracias a la variedad de formas de
conectarse posibles, deben surgir nuevas tecnologias que se adapten a
los dispositivos en el mercado, dandoles nuevas opciones.
WAP (Wireless Application Protocol, por sus siglas en ingles) es el
protocolo para aplicaciones inalambricas.
Consiste en un conjunto de especificaciones, que se han desarrollado
por medio del WAP Forum <http://www.wapforum.com/> y que permite la
utilizacion del WML (Wireless Markup Language) que es el lenguaje de
marcas inalambrico, asi como de WBMP (Wireless Bitmap) utilizado
para graficos monocromaticos, permitiendo que los desarrolladores
dise~en aplicaciones de interconexion para dispositivos portatiles.
Y es que los nuevos telefonos celulares, pagers, palmtops, etc.
estan cambiando la forma de comunicacion personal portatil.
Gracias a esta tecnologia estos peque~os aparatos pueden conectarse
a la web. El dise~o de WAP fue creado para trabajar bajo restricciones
de memoria y procesadores, peque~as pantallas monicromaticas capaces de
desplegar muy pocas lineas de texto y conexiones irregulares debido
al ancho de banda reducido.
Gracias al apoyo de varios cientos de vendedores de estos dispositivos,
el WAP Forum <http://www.wapforum.com/>, esta convirtiendo a WAP en el
estandar, permitiendo que cualquier usuario con un dispositivo de mano
pueda tener acceso a la informacion, lo que ha traido por consiguiente
que cada vez mas informacion se transmita por redes inalambricas.
---RESOLVER UNA ECUACION LINEAL CON DOS INCOGNITAS---
Probablemente te preguntes la razon de este articulo. Primeramente me
imagino que la mayoria de lectores son aun estudiantes y les puede
servir, en segunda porque lo pueden aplicar para hacer un programa
o resolver alguna tarea comun. Realmente admito que le tome afecto a
las matematicas cuando les vi aplicacion practica en la programacion,
espero te suceda a ti temprano, hehe.
Tenemos 2 ecuaciones con 2 incognitas cada una, para conocer los valores
de "x" y de "y", despejamos en cualquier ecuacion, una incognita
cualquiera.
Por ejemplo:
3x + 5y = 7 <---- ecuacion 1
2x - y = -4 <---- ecuacion 2
Despejamos a "y" en la primera ecuacion:
5y=-3x+7
y=(-3x+7)/5 <--esto vamos a poner en vez de "y" en la otra ecuacion
Sustituimos en la segunda ecuacion:
2x - ((-3x+7)/5)=-4
Ahora es tiempo de despejar a x:
10x-(-3x+7)=-20
10x+3x-7=-20
13x-7=-20
13x=-20+7
13x=-13
x=-1
Sustituimos el valor de x en la siguiente:
y=(-3x+7)/5
y=(-3(-1)+7)/5=-4
y=(3+7)/5
y=2
Si sustituimos ambas variables para comprobar:
3(-1) + 5(2) = 7 ---- ecuacion 1 -3+10=7 7=7
2(-1) - 2 = -4 ---- ecuacion 2 -2-2=-4 -4=-4
---TRUCOS DE WORD 97---
Es inevitable a veces usar Office, es por eso que para las personas
que tengan que enfrentarse a los programas de Gates, les mando unos
trucos para hacer las cosas lo mejor posible.
* Para quitar un boton de cualquier barra, tan solo dale click
oprimiendo la tecla alt al mismo tiempo y arrastralo hacia la hoja.
Para poner algun boton que falte, en Herramientas, Personalizar,
Comandos. En categorias haz click en la deseada y se~ala el boton que
quieras a~adir y arrastralo a la barra donde quieras que aparezca.
* Para desaparecer una barra completa solo da click con el boton derecho
del raton sobre ellas, apareceran los nombres de las barras marcados
o desmarcados segun aparezcan o no.
* Para dar animacion al texto, es decir, para que este menos aburrido,
te recomiendo checar la pesta~a que esta en Formato, Fuente, que se
llama Animacion.
* Sin duda el mejor truco es oprimir las teclas "alt+F4", jeje, con eso
acabas de una vez por todas con el Monopolio de Gates.
---INTRODUCCION A PYTHON---
Este articulo surgio de mis apuntes en mi iniciacion a Python, aunque no
lo utilizo, quiero compartir con ustedes lo que consegui.
Primero, piensa en Python como un pseudocodigo, las variables no tienen
tipos, osea que no las declaras, aparecen cuando las asignas y
desaparecen cuando dejas de usarlas.
La asignacion es con "=" y la igualdad con "==".
Puedes asignar muchas variables a la vez. (Asignacion Multiple).
x,y,z = 1,2,3
Los bloques de codigo son indicados con sangrias y no con corchetes
o con un begin/end.
Para poner comentarios se utiliza "#".
* Si quieres cerrar la ventanita, simplemente con "ctrl" + "z"
o "import sys; sys.exit()".
Despues de bajar Python e instalarlo, te crea un archivo ejecutable.
Despues de mostrarte algo mas o menos como esto:
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>
Lo primero que puedes hacer es usar Python como una calculadora :)
>>>2+2
y al darle enter la salida sera 4 y te regresara a los 3 signos de
"mayor que" ( >>> ).
Despues puedes hacer que te regrese texto como si fuera eco asi:
>>>'hola amigo'
Donde te respondera amablemente con un 'hola amigo'.
Es importante que lleve las comillas (dobles o sencillas) ya que
de lo contrario lanzara un error.
Despues puedes asignar valores numericos o de texto a una variable
como sigue:
>>>numero1=2
>>>numero2=3
>>>suma=numero1+numero2
>>>print suma
5
El numero 5 sera la respuesta de las lineas anteriores.
Se puede concatenar cadenas (pegarlas) con el operador "+" y
repetirlas con "*":
>>> palabra = 'Ayuda' + 'Z'
>>> palabra
'AyudaZ'
>>> '<' + palabra*5 + '>'
'<AyudaZAyudaZAyudaZAyudaZAyudaZ>'
Se puede indexar una cadena. Como en C, el primer caracter de
una cadena tiene el indice cero (0). No hay un tipo caracter diferente;
un caracter es una cadena de longitud uno.
>>> palabra[4]
'a'
>>> palabra[0:2]
'Ay'
>>> palabra[2:4]
'ud'
La longitud del corte es la diferencia entre los indices a
partir del primero, si los dos estan entre limites.
Por ejemplo, la longitud de palabra[1:3] es 2.
Los indices de corte tienen valores por omision muy practicos;
si se omite el primer indice se supone cero y si se omite el segundo
se supone el tamaÒo de la cadena sometida al corte.
>>> palabra[:2] # Los primeros dos caracteres
'Ay'
>>> palabra[2:] # Todos menos los primeros dos caracteres
'daZ'
Es decir que toma cualquier valor hasta antes de 2 en el primer caso
y toda la cadena a partir de 2 en el segundo caso.
Los indices pueden ser tambien negativos, para hacer que la cuenta
comience por el final. Por ejemplo:
>>> palabra[-1] # El ultimo caracter
'Z'
>>> palabra[-2] # El penultimo caracter
'a'
>>> palabra[-2:] # Los dos ultimos caracteres
'aZ'
>>> palabra[:-2] # Todos menos los dos ultimos
'Ayud'
No podemos incluir -0 porque no puede ser negativo ese numero,
seria el mismo cero, el mismo valor.
La funcion interna len() devuelve la longitud de una cadena:
>>> s = 'supercalifragilisticoexpialidoso'
>>> len(s)
32
Python utiliza varios tipos de datos compuestos, que se utilizan para
agrupar otros valores. El mas versatil es la lista, que se puede escribir
como una lista de valores (elementos) separada por comas entre corchetes.
Los elementos de una lista no tienen que ser todos del mismo tipo.
>>> a = ['programa', 'nuevo', 100, 1234]
>>> a
['programa', 'nuevo', 100, 1234]
Como los indices de las cadenas, los indices de una lista empiezan en
cero (0). Las listas tambien se pueden cortar, concatenar, etc.:
>>> a[0]
'Programa'
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['nuevo', 100]
>>> a[:2] + ['otro', 2*2]
['programa', 'nuevo', 'otro', 4]
>>> 3*a[:3] + ['hola']
['programa', 'nuevo', 100, 'programa', 'nuevo', 100, 'programa',
'nuevo', 100, 'hola']
A diferencia de las cadenas, que son inmutables, es posible cambiar
los elementos de una lista:
>>> a
['programa', 'nuevo', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['programa', 'nuevo', 123, 1234]
Se puede asignar a un corte, lo que puede hasta cambiar el tama~o de
la lista:
>>> # Reemplazar elementos:
... a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # Quitar elementos:
... a[0:2] = []
>>> a
[123, 1234]
>>> # Insertar cosas:
... a[1:1] = ['puaj', 'yyz']
>>> a
[123, 'puaj', 'yyz', 1234]
>>> a[:0] = a # Insertarse (una copia) al principio de ella misma
>>> a
[123, 'puaj', 'yyz', 1234, 123, 'puaj', 'yyz', 1234]
La funcion interna len() se aplica tambien a las listas:
>>> len(a)
8
Es posible anidar listas (crear listas que contienen otras listas),
por ejemplo:
>>> q = [2, 3]
>>> p = [1, q, 4] # OJO de que aqui metemos el contenido de "q"
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2
>>> p[1].append('xtra')
>>> p
[1, [2, 3, 'xtra'], 4]
>>> q
[2, 3, 'xtra']
Observa que, al contener "p" en el indice 1 a "q", esta ultima
se ve afectada tambien, por lo tanto p[1] y q se refieren en
realidad al mismo objeto.
Por supuesto, se puede usar Python para tareas mas complejas.
Por ejemplo:
>>> # Serie de Fibonacci:
... # La suma de dos elementos nos da el siguiente
... a, b = 0, 1
>>> while b < 10:
... print b
... a, b = b, a+b
...
1
1
2
3
5
8
Print se diferencia de escribir simplemente la expresion
(como con la calculadora) en el modo en que gestiona las expresiones
multiples y las cadenas. Las cadenas se imprimen sin comillas y
se inserta un espacio entre los elementos para queden las cosas
colocadas:
>>> i = 256*256
>>> print 'El valor de i es', i
El valor de i es 65536
Si se pone una coma al final se evita el retorno de carro tras la
salida:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Observa que el interprete inserta una nueva linea antes de presentar
el indicador si la ultima linea quedo incompleta.
Ademas de la sentencia while, recien presentada, Python conoce las
sentencias de control de flujo comunes de otros lenguajes, quiza la
mas conocida de las construcciones es if (si).
Por ejemplo:
>>> # [Codigo que asigna un valor a 'x'...]
>>> if x < 0:
... x = 0
... print 'Negativo cambiado a cero'
... elif x == 0:
... print 'Cero'
... elif x == 1:
... print 'Uno'
... else:
... print 'Mas...'
...
Puede haber cero o mas partes "elif" y la parte else (si no) es opcional.
La palabra clave "elif" es una abreviatura de "else if" y evita el
sangrado excesivo. Una secuencia if ... elif ... elif ... es el
sustituto de las sentencias switch o case de otros lenguajes.
La construccion for (para) es un poco diferente a lo acostumbrado
en C o Pascal. El for de Python recorre los elementos de una secuencia
(por ejemplo, una lista o cadena), en el orden en que aparecen en la
secuencia. Por ejemplo:
>>> # Medir algunas cadenas:
... a = ['gato', 'ventana', 'defenestrar']
>>> for x in a:
... print x, len(x)
...
gato 4
ventana 7
defenestrar 11
No es aconsejable modificar la secuencia que se esta recorriendo
(lo que solo puede ocurrir en secuencias mutables, por ejemplo, listas).
Si se necesita modificar la lista recorrida, por ejemplo, para duplicar
los elementos, hay que recorrer una copia.
La notacion de corte hace esto muy comodo.
>>> for x in a[:]: # hacer una copia por corte de la lista entera
... if len(x) > 7: a.insert(0, x)
...
>>> a
['defenestrar', 'gato', 'ventana', 'defenestrar']
El indice del for se mueve entre los elementos de una lista.
Para que funcione como un for normal usamos "range".
# Imprime los valores de 0 a 99 inclusive.
for value in range(100):
print value
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
El punto final indicado nunca es parte de la lista generada,
asi que range(10) genera una lista de 10 valores, justo los indices
legales de los elementos de una secuencia de longitud 10.
Es posible hacer que el rango arranque en otro numero o especificar
un incremento diferente (incluso negativo):
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]
Para recorrer los indices de una secuencia, combina range() y len()
de este modo:
>>> a = ['Cinco', 'lobitos', 'tiene', 'la', 'loba']
>>> for i in range(len(a)):
... print i, a[i]
...
0 Cinco
1 lobitos
2 tiene
3 la
4 loba
Las construcciones con break, continue y else en bucles se usan
igual que en C:
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, '=', x, '*', n/x
... break
... else:
... print n, 'es primo'
...
2 es primo
3 es primo
4 = 2 * 2
5 es primo
6 = 2 * 3
7 es primo
8 = 2 * 4
9 = 3 * 3
La instruccion pass se utiliza para hacer esperar una interrupcion
de teclado.
Para obtener entradas de un usuario, se usa la funcion "input".
x = input("Dame un numero: ")
print "El cuadrado de ese numero es", x*x
Proximo paso: Abstraccion. Queremos darle nombre a un trozo de codigo
y llamarlos con unos parametros, es decir, queremos definir una funcion.
Es muy facil, usamos "def" para ello.
def square(x):
return x*x
print square(2) # Imprime un 4
Los parametros son pasados por referencia, veamos otro ejemplo:
def change(some_list):
some_list[1] = 4
x = [1,2,3]
change(x)
print x # Prints out [1,4,3]
Ahora algo mas complicado:
def nochange(x):
x = 0
y = 1
nochange(y)
print y # Donde imprime un 1
Porque imprime un 1?. Pues porque su valor no cambia, nosotros no
podemos afectarlo.
Imagina que la variable es un molde donde el usuario hace una galleta
llamada "a". Cuando el usuario hace la galleta, no podemos cambiarle
el sabor original lo unico que nos queda es ponerle mermelada pero
la galleta tendra su sabor original mas la mermelada, entonces ya sera
otra galleta llamada "b". (Disculpen, pero son las 6 de la tarde
y no comi bien).
Las funciones son valores y se pueden pasar a otras funciones nuevas,
por ejemplo:
queeble = square
print queeble(2)
En Python defines una clase con la palabra class.
class Basket:
# Recuerda siempre el argumento "self"
def __init__(self,contents=None):
self.contents = contents or []
def add(self,element):
self.contents.append(element)
def print_me(self):
result = ""
for element in self.contents:
result = result + " " + `element`
print "Contains:"+result
* Todos los metodos (funciones en objetos)
tienen un argumento adicional al inicio, conteniendo el objeto mismo
llamado self.
* Los metodos son llamados como sigue: Objeto.metodo(arg1, arg2)
* Algunos nombres de metodos como _init_ son predefinidos y tienen
un significado especial. Es el nombre del constructor de la clase,
osea que es la funcion que se llama cuando creas una instancia
(un objeto a partir de una clase).
* Las comillas transforman un objeto en una cadena.
* El signo de adicion (+) se usa para concatenar listas o cadenas.
---FIBRA OPTICA---
La necesidad de nuevos planteamientos en las comunicaciones surgio
en paises telefonicamente avanzados, en los que su red pedia
soluciones a problemas de saturacion, y cuya solucion era
conseguir medios de mayor capacidad que los existentes.
Anteriormente, cuando se necesitaba un medio de transmision de gran
capacidad de trafico se acudia a la instalacion de cable coaxial o
radioenlaces de mayor capacidad. Al aumentar el numero de enlaces
necesarios por demanda de trafico, se requeria un mayor ancho de banda
del portador, lo que,a su vez, exigia el empleo de frecuencias cada vez
mas altas y, en consecuencia, mas repetidores en las rutas de cables
coaxiales, a causa de la mayor atenuacion de las se~ales.
En el caso de los radioenlaces, el aumento de la capacidad tambien
se traducia en el empleo de frecuencias mas altas y mayor numero de
repetidores, pero esta vez con el agravante de la saturacion del
espectro electromagnetico.
La explotacion de las redes telefonicas se hizo mas onerosa y fue
aumentando las dificultades de orden tecnico, lo que exigia nuevos
planteamientos para esos problemas. Las investigaciones hechas en
la decada de los a~os sesenta en torno a la fibra optica y sus
posibles aplicaciones como guia de onda sirvieron de base para el
nuevo camino que se pretendia emprender.
Conviene recalcar por que se ha usado la luz como soporte de informacion
y por que no nos servimos de la atmosfera como medio de propagacion.
Los cuerpos que no se hallan en equilibrio en su entorno radian o
absorben energia. Podemos admitir desde un punto de vista conceptual
que una comunicacion implica intercambio de energia; ahora bien,
esa energia puesta en juego se puede clasificar de muchos modos, y uno
de ellos es el espectral, en el que dos parametros relacionados entre
si ordenan de manera espacial y temporalmente dicha energia.
El parametro espacial indica que la propagacion es espacialmente
periodica, el segundo es temporal y se le llama frecuencia.
Hablando en terminos de frecuencia, en el caso de la utilizacion de
portadores metalicos, las energias transmitidas se situaban en zonas
de frecuencia del orden de decenas de MHz, y de decenas de GHz cuando
se trataba de radioenlaces.
Estas se~ales, en tecnicas de modulacion de frecuencia, constituyen
las portadoras que, empleadas sobre canales telefonicos de un ancho
de banda tipico de 4 KHz proporcionan un indice teorico del numero de
circuitos telefonicos que dichos portadores admiten.
Conceptualmente, un sistema de transmision por fibra optica es similar
al sistema de microondas en muchos aspectos; las diferencias estriban
en que en un caso el medio de transmision es el espacio libre, y en el
otro, una guia de ondas de vidrio; y en que la transmision tiene lugar
a frecuencias opticas, varios ordenes de magnitud superiores a las de
microondas.
Si ahora consideramos la zona espectral optica, cuya frecuencia se
situa en torno a los 1014 Hz y suponiendo que se utiliza en las tecnicas
MDF, la capacidad potencial de este medio de transmision seria 107 veces
la de un cable coaxial y 104 veces la de un radioenlace de microondas.
Esta posibilidad, por si sola, ya justifica el empleo del espectro optico
en las comunicaciones.
Pero es evidente que la utilizacion de la luz como portadora
de informacion exige disponer de una fuente de determinadas caracteristicas
y, de hecho, fue la disponibilidad del laser como fuente de luz coherente
y monocromatica lo que estimulo la explotacion de comunicaciones opticas
como soporte de flujos de informacion, debido a la alta frecuencia de
la portadora.
Tambien en la decada de los a~os sesenta comenzaron los estudios
basicos sobre los procesos de modulacion y deteccion de luz,
necesarios para llevar a cabo las conversiones electro opticas
imprescindibles en la transmision de se~ales por medio de la luz.
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
"No tengas miedo de ir despacio, teme a detenerte".