Tuesday, April 22, 2014

Internet Relay Chat - zero (Prelude)

The IRC Prelude

By David Caraballo (DC-itsme) and Joseph Lo (Jolo)
The original version of this page is at <http://www.irchelp.org/irchelp/new2irc.html>

What is IRC, and how does it work?

IRC (Internet Relay Chat) provides a way of communicating in real time with people from all over the world. It consists of various separate networks (or “nets”) of IRC servers, machines that allow users to connect to IRC. The largest nets are EFnet (the original IRC net, often having more than 32,000 people at once), Undernet, IRCnet, DALnet, and NewNet.
Generally, the user (such as you) runs a program (called a “client”) to connect to a server on one of the IRC nets. The server relays information to and from other servers on the same net. Recommended clients:
    • irssi - terminal-mode client
    • xchat - X11 (graphical) client
  • Be sure to read the documentation for your client!
    Once connected to an IRC server on an IRC network, you will usually join one or more “channels” and converse with others there. On EFnet, there often are more than 12,000channels, each devoted to a different topic. Conversations may be public (where everyone in a channel can see what you type) or private (messages between only two people, who may or may not be on the same channel). IRC is not a “game”, and I highly recommend you treat people you meet on IRC with the same courtesy as if you were talking in person or on the phone, or there may be serious consequences.

Some details

Channel names usually begin with a #, as in #irchelp . The same channels are shared among all IRC servers on the same net, so you do not have to be on the same IRC server as your friends. (There are also channels with names beginning with a & instead of a #. These channels are not shared by all servers on the net but exist locally on that server only.)
Each user is known on IRC by a “nick”, such as smartgal or FunGuy. To avoid conflicts with other users, it is best to use a nick that is not too common, e.g., “john” is a poor choice. On some nets, nicks do not belong to anyone, nor do channels. This can lead to conflict, so, if you feel strongly about ownership of such things, you may prefer networks with “services” likeUndernet, DALnet, or other smaller networks.
Channels are run by channel operators, or just “ops” for short, who can control the channel by choosing who may join (by “banning” some users), who must leave (by “kicking” them out), and even who may speak (by making the channel “moderated”)! Channel ops have complete control over their channel, and their decisions are final. If you are banned from a channel, send a /msg to a channel op and ask nicely to be let in (see the /who command in the next section to learn how to find ops). If they ignore you or /who gives no response because the channel is in secret mode (+s), just go somewhere else where you are more welcome.
IRC servers are run by IRC admins and by IRC operators, or “IRC ops”. IRC ops manage the servers themselves and, on EFnet and many other networks, do not get involved in personal disputes, channel takeovers, restoring lost ops, etc. They are not “IRC cops.”

Talking, and entering commands

Commands and text are typed in the same place. By default, commands begin with the character / . If you have a graphical client such as mIRC for Windows, many commands can be executed by clicking on icons with the mouse pointer. It is, however, highly recommended that you learn to type in the basic IRC commands first. When entering commands, pay close attention to spacing and capitalization. The basic commands work on all the good clients.
Some examples are given below. In these, suppose your nick is “yournick”, and that you are on the channel #coolness.
Your friend “MaryN” is in #coolness with you, and your friend “Tomm” is on IRC but is not on a channel with you. You can apply these examples in general by substituting the relevant nick or channel names.

What you type, What happens

/join #coolness

  • You join the channel #coolness.
/who #coolness

  • Gives some info on users in the channel.
@ = channel op, while * means IRC op.
hello everyone

  • Everyone on #coolness sees hello everyone. (You need not type in your own nick.)
/me is a pink bunny

  • Everyone in #coolness sees * yournick is a pink bunny
/leave #coolness

  • You leave the channel.
/whois Tomm

  • You get some info about Tomm or whatever nickname you entered.
/whois yournick

  • This is some info others see about you.
/nick newnick

  • Changes your nick to “newnick”
/msg Tomm hi there.

  • Only Tomm sees your message (you don’t need to be on the same channel for this to work).
/ping #coolness

  • Gives information on the delay (round-trip) between you and everybody on.


Coolness

/ping Tomm

  • Gives information on the delay (round-trip) between you and just Tomm.
/dcc chat MaryN

  • This sends MaryN a request for a dcc chat session. MaryN types /dcc chat yournick to complete the connection. DCC chat is faster (lag free) and more secure than /msg.
/msg =MaryN Hi there!

  • Once a DCC connection has been established, use the /msg =nick message format to exchange messages (note the = sign). DCC does not go through servers, so it are unaffected by server lag, net splits, etc.
/help

  • This works in many clients. Try it!
/quit good night!

  • You quit IRC completely, with the parting comment so that others see “*** Signoff: yournick (good night!)”.

NOTE: When you are not in a named channel, lines not beginning with a / have no effect, and many commands work differently or fail to work altogether.

Where to go

You can learn a lot by joining a channel and just listening and talking for a while. For starters, try these channels: #new2irc, #newuser, #newbies, or #chat.

For help with the mIRC client, try joining #new2mirc or #mirchelp. For help with general IRC questions, join #irchelp.

To form your own channel with the name #mychannel (if #mychannel does not already exist), type /join #mychannel. The channel is created and you are automatically made an op.

Some smileys and jargon

:-) is a smiley face, tilt your head to the left to see it. Likewise, :-( is a frown. ;-) is a wink. :~~( is crying, while :-P is someone sticking their tongue out. :-P ~~ is drooling. (-: a lefty’s smile, etc. There are hundreds of these faces.

Here are some common acronyms used in IRC:
brb = be right back bbiaf = be back in a flash
bbl = be back later ttfn = ta ta for now
lol = laughing out loud j/k = just kidding
np = no problem imho = in my humble op
ire  =  hi again, as in 're hi'           wb = welcome back
 wtf =  what the f--k                     rtfm = read the f--king manual
rotfl = rolling on the floor laughing

Some advice


  • Etiquette Typing in all caps, LIKE THIS, is considered “shouting” and should be avoided. Likewise, do not repeat yourself or otherwise “flood” the channel with many lines of text at once. Be sure to use correct terminology, e.g., “channel”, not “chat room”, and “nick”, not “handle”.

While in a channel, follow the lead of the channel ops there. If you antagonize them, you may be “kicked” off the channel forcibly and possibly “banned” from returning. On the other hand, some channel ops are power-hungry and may kick or ban for no good reason. If this happens, or if someone on a channel is bothering you, simply leave the channel — there are thousands of others.

  • Registration On many networks. services exist for the registration of nicknames and/or channels. These services vary greatly between networks, but are useually mentioned in the server’s message of the day (MOTD) which is shown when you first connect. You can show the MOTD again at any time by typing /motd in most clients.

THe network’s home page will also detail any services offered on that network.
Nickname registration allows you to “own” a nickname, and prevent others from using it on that network. Consequently, if you try to use a nickname that someone else already has reserved on such a network, you will recieve a warning message from the network, and after a few seconds, your nickname will be changed or your will be disconnected. In the event that this happens, simply change your nickname until you find one that’s not taken. Consult the MOTD or network homepage for details if you want to register your nickname.

  • Disconnected by /list? If you get disconnected when using the /list command, try switching servers, or else recent channel lists are available on the WWW athttp://www.irchelp.org/irchelp/chanlist/.

  • Harrassment and attacks If someone starts harassing or flooding you, leave the channel or use the /ignore command. For more details, mIRC users see our flood protection page, ircIIusers type /help ignore. It is a good idea to set your user mode to +i (invisible) to avoid unsolicited messages and harrassment — if you are “invisible” generally only users on a channel with you can determine what nick you are using.

If somebody else is crashing or disconnecting you, see our Denial of Service or “Nuke” Attacks page. You can also log and report abuse when it violates server rules, which you can read by typing /motd.

More detailed help

For further information about these issues, as well as about other commands, visit the web site <http://www.irchelp.org. There you can find many help files, such as:

A word of warning


  • IRC scripts are sets of commands that your client will run. Many otherwise good scripts have been hacked so that if you load them, you can seriously compromise your security (someone can get into your account, delete all of your files, read your mail, etc.). There are also evildoers who try to send people viruses and other bad things. Just like in real life, don’t accept anything from a stranger. There have been many incidents of this type, not just a few. Do not ever run a script unless you know what each line does, not even if it is given to you by a friend, as your friend may not have the expertise to detect well-hidden “trojans”.

  • Automatic DCC get is a very bad idea! Once it is on, you are susceptible to dangers ranging from disconnection from your server to giving someone else control of your computer. Quite a few people have run into serious problems because of the DCC autoget setting.
Special thanks to FreeSoft, prysm, hershey, turtle, Ariell, and other #irchelp helpers on EFnet for their many helpful suggestions.
Now that you’ve read this beginner’s guide, get on IRC and enjoy! Or if you are interested in learning more, check out the many documents on the #IRChelp home page.


All documents © irchelp.org or original authors 2012 
Baked with PieCrust 1.0.0-dev.

List of Internet Relay Chat commands

From Wikipedia, the free encyclopedia

This is a list of all Internet Relay Chat commands from RFC 1459, RFC 2812, and extensions added to major IRC daemons. Most IRC clients require commands to be preceded by a slash ("/"). Angle brackets ("<" and ">") denote what's placed in the encapsulated field, not a literal part of the command. Arguments encapsulated in square brackets ("[" and "]") are optional and override the command's defaults.

Friday, March 14, 2014

Que es Arduino?



Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

Fuentes:
 http://es.wikipedia.org/wiki/Arduino
https://www.youtube.com/watch?v=1ZH9PrFUxH0


Wednesday, December 18, 2013

Como crear un motor eficiente de busqueda electronica, entre algunos consejos.

Fuente: Udacity 


Primero, donde estas en contexto con la programacion usando el lenguaje de programacion Phyton?



Si sabes como resolver estas preguntas, no importa mucho leer este post, si te interesa lo que dice, bueno, distinto, si no sabes mucho, aventurate un poco, pero no tomes todo lo escrito como hecho, investiga por tu cuenta y aprende.


Class: CS101 in Phyton

Session 6: Recurssion

Ejemplos de problemas cuando uno sabe algo de programacion por Phyton y algo de recurcion.


Definicion de recursion:

1 Caso de Base, o secuencia cero
-la minima expresion de la secuencia o elementos analizados


2 Caso recursivo

-la version mas corta  del mismo metodo antes del 'base case'.

-Recursive definition

1. One base case
- meaning the smallest input know to the answer

2 Recursive case
-Smallest versions of 'itself'


Quiz 1

 Define a procedure, factorial, that takes a natural number as its input, and
# returns the number of ways to arrange the input number of items.

Prueba 1


Define un metodo, factorial, donde tomes un numero natural como entrada, y

retornes el numero de veces que puede ser organizado en numeros de aquellos elementos de numeros reales.

def factorial(n):

Quiz 2

# Define a procedure is_palindrome, that takes as input a string, and returns a
# Boolean indicating if the input string is a palindrome.

Define un proceso que devuelva una respuesta si la palabra usada o analizada en el programa como input, es palindromo. Una palabra palindromo son aquellos elementos que de alante pa tras son lo mismo que de a tras palante. Ejemplo. la letra 'a' es palindromo, 'ab' no lo es, 'aa' lo es, 'aca' lo es, 'madam' la es y asi sucesivamente. retorna 'verdadera' si lo es. 'True'

# Base Case: '' => True
# Recursive Case: if first and last characters don't match => False
# if they do match, is the middle a palindrome?

#Caso donde la 'secuencia sea cero' o 'base case'= 'True'
#caso recursivo: si el primer  y el ultimo elemento o caracter no son las mismas =False o falso
#si son iguales, crea un proceso para saber si el medio de las palabras o elementos es un palindromo.

def is_palindrome(s):

Tips: http://docs.python.org/3/library/stdtypes.html#string-methods

Tips: la recurcion es la implementacion del mismo metodo dentro del metodo, que solo saldra cuando se llegue al 'base case' o 'la secuencia cero' por lo mismo se resta de la secuencia lo que se va a analizar hasta llegar al 'base case' o 'secuencia cero' y en este caso la 'secuencia cero' es la minima expresion del input, o elemento puesto para resolver. 


Otros tips un poco mas enfocado en la pregunta: 


-len(n)
-n[1:2]

Second day of session 6


Recurssion and fibonacci


  • El numero fibonacci es una secuencia que suma dos numeros: el anterior al siguiente, por el siguiente ya sumado por el anterior .
  • Estos dos numeros son parte de una secuencia que en su mismo metodo se expande infinitamente.
  • Otra forma de verlo es como la suma del resultado y el numero anterior


Por ejemplo:

0 = 0
1 = 1
0 1 = 1
1 1 = 2
1 2 = 3
2 3 = 5 y asi sucesivamente

pero matematicamente es lo siguiente
n>1
n : n-1  +  n-2
como es una secuencia, el n-1 y el n-2 no significan el numero menos 1 o 2
sino la siguiente secuencia

  0
     1
        ( 1 ) [n-1]    +   ( 1[n-1] +  1=  2) [n-2]
            viene de 1 + 2 =  3
              y lo siguiente seria 2 + 3 = 5
               y lo siguiente seria 3 + 5 = 8
                y lo siguiente seria 5 + 8 = 13
                 y lo siguiente seria 8 + 13 = 21

y asi scuencialmente hasta el infinito.




*****

Como crear un search engine eficiente, o un motor eficiente de busqueda electronica, entre algunos consejos.


  • Se estudia un poco la recurcion para entender un poco el como se buscan eficientemente las paginas en la internet. Cada pagina tiene su direccion, esa direccion en el programa diseñado tiene que ser una 'llave' o 'punto de referencia' que cuando en la mayoria de letras y codigos, salga esa 'llave' o 'punto de referencia' el programa se meta en la pagina, por medio de algunas funciones predeterminadas, y busque la informacion determinada o diseñada a buscar.
  • Ejemplo de la informacion: buscar cuantas veces se repite una palabra y contarla, ponerla en un 'diccionario' y formular cualquier tipo de estadistica.
  • Un diccionario es un metodo que organiza cualquier tipo de informacion dada su 'llave' o 'punto de referencia, y por ende necesita un lugar donde colocar los datos sustraidos por el uso de la 'llave' o 'el punto de referencia' llamado buckets, los buckets pueden ser nodos, nodes, arrays, listas.
  • Con esto se puede implementar un searh engine o  motor eficiente de busqueda electronica, planear un buen metodo recursivo que busque las paginas por medio de 'llaves' o 'punto de referencia', saber como implementar los metodos para que la informacion no se repita y el programa no caiga en un loop, para esto se necesita saber un poco de combinaciones y 'trees' o 'arboles', y el diccionario para guardar la informacion eficientemente y tenerla a la mano para compartir o aprender sobre cualquier tipo de informacion especifica deseada.
  • Un 'arbol' o 'tree' como la palabra puede definir, es como un arbol normal que tiene, en este sentido, una raiz, pero esta raiz puede ser la combinacion de varios elementos, y en su crecimiento, uno debe saber que un arbol de manzanas no da naranjas, con esto digo que los mismos elementos tienen que ser del mismo universo, y saber cuales son sus elementos y su contenido. 
  • Ejemplo de un 'tree' o un 'arbol': el alfabeto o las letras conocidas por el español tienen entre 26 o 25 elementos, pero estos elementos pueden ser combinados eternamente por medio de cualquier calculacion o formula matematica, pero en los 'trees' o 'arboles' comienza con unos elementos predeterminados que crean la raiz. por lo menos. si una raiz comienza con 'a', si solo se quiere tener puras a, no habra 'arbol' o 'tree' sino que solo una secuencia, y esta es la diferencia, por lo mismo un 'tree' o 'arbol' tiene que implementar una serie de opciones u otros elementos del mismo universo.
  • Por eso puede comenzar por 'a', pero la segunda generacion, o nivel, se expandera a ser, aa, ab, ac, ad, o todos los elementos encontrados por la 'llave' o 'el punto de referencia'. y dentros de las nuevas 'llaves' o 'punto de referencia' se buscan los siguientes 'puntos de referencia' o 'llaves'
  • Ejemplo, en una pagina se encuentran varios otros link, esos links son las raices del arbol.
  • Uno puede diseñar un programa para guardar cuantas veces se repite la misma 'llave' o 'punto de referencia, y saber su popularidad, o/y uno puede omitir este 'punto de referencia' o 'llave' para no caer en un 'loop' infinito o repeticion, creando una especie de metodos o funciones que guarden las 'llaves' o 'puntos de referencia' usados y/o saltar u omitir ese elemento repetido, para asi no usar tanto la memoria y que el programa fluya sin ningun tipo de complicacion, que ojo, todos los programas tienen problemas, o bugs, pero se mejora o se cambia por completo el programa una vez creado otro programa o mejorado el anterior.
  • Consejo: si al trabajar, o diseñar un programa encuentran muchos problemas, borralo todo, despeja la mente por horas, y escribe la solucion como la harias normalmente sin el uso de la programacion, luego escribe los pasos, y traducelos al lenguaje que manejes y trabaja para darle solucion, poco a poco, puede que con uso de pequeñas metas, o por uso de respuestas ya analizadas que guiaran su diseño a la solucion o implementacion de un programa eficiente, directo, y simple. Entiende el uso de los algoritmos y el como crear funciones usando estos. El conocimiento de la matematica pura, haran que esa complejidad, del pensar abstractamente en soluciones de numeros y elementos, se transforme en el arte de la simplicidad, de lo contrario sera un programa lleno de codigos y metodos inutiles que crearan a la larga confucion a la hora de actualizar el programa, o problemas como el volver a hacer un progama para que se entienda por todos.

Para mejor comprension de esta vagua explicacion sobre los 'Diccionarios', 'Arboles o trees', 'Llaves o puntos de referencia' o 'Keys', la internet es una gran herramienta que permite a cualquiera aprender de estos temas sin tener la escusa del no hacerlo por dinero o falta de motivacion, pues motiva cuando poco a poco, se ve como el mundo se viene construyendo, en parte, por medio del uso de esta gran herramienta llamada internet; y el estudio del como crear programas que mejoren su condicion, es una tarea que al saberla remunera, tanto emocionalmente, como socialmente y por ende su expancion, intercambiando ideas y/o programs, gratuitamente, como la venta del servicio de quien conoce como crear soluciones, por tambien querer un poco de esa otra herramienta llamada dinero, medio por el cual quien la hace controla su maquinaria.


Wednesday, October 9, 2013

Java a lo maracucho, capitulo 4, parte 2

Referencia y guia: Cay Horstmann, Big Java Edicion 4

Capitulo 4 parte II


4.4 Llamando metodos estaticos.


Primero existen las variables estaticas y luego los metodos estaticos. La palabra "estatica" en este caso viene de "Clase" como puede llamarse variable de la clase, o el metodo de la clase. 

En otras palabras, una variable estatica contiene la informacion referenciada de la clase luego de crear otra instancia de la clase. 

Distinto a los medotos estaticos, que no son llamados por los objetos de otras clases sino por la misma clases y el resultado puede ser el contenido de una variable estatica o el resultado de basicas operaciones numericas.



class Fabrica
{

   public static int carro;

   //el constructor
   public Fabrica()
   {
   ++carro;
   }

   //metodo estatico
   public static cuantosCarros()
   {
   return carro;
   }

}

Al crear el objeto de Fabrica, un carro es creado y  al final del dia, o luego de varias instancias de la misma clase, la variable estatica tiene las veces que un carro fue creado.

¿Para que sirven los metodos estaticos?

A mi parecer, son metodos genericos usados para la facilidad del usuario a la hora de llamarlos. Metodos que retornan la informacion independientemente de que objeto o clase las llame. Posiblemente como una interface.

4.5 Strings


En en lenguaje de maquina, los Strings son caracteres especificos guardados por secuencias en algun lugar de la memoria, accesible por medio de la referencia creada.

En Java eso es otra historia, pero relevante, pues como programador en java uno no tiene que programar en lenguaje de maquina la forma de conectar los caracteres, pero tiene que saber que un String esta formado por la combinacion de caracteres, y que estos en si ocupan una pocision.

Al saber que cada String es la combinacion de caracteres guardados en la memoria, y que cada caracter tiene su numero especifico, el manejo de los String crea en si una herramienta util para el programador y el como diferenciar y analizar la informacion eficazmente..

Los String son objetos inmutables, y provienen de su misma clase String, por ende la capitulacion en la "S" de String.

Hay muchos ejemplos de los String que el programador tiene que aprender, pero el fundamental es la posicion incial del primer caracter. 0. 

El objeto String puede ser creado cuando se inicializa la referencia

public String letra = "letras";

o 

public String letra;

letra = "letras";

De ahi en adelante la practica hace al profecional, he aqui una pagina donde uno puede aprender a usar el String y mejorar su conocimiento:

Codigbat: una pagina para practicar la programacion

http://codingbat.com/java/String-1

Si hay algo que no se entiende, el idioma o algo, envienme un mensaje y vemos como lo resolvemos, gracias.

Para la comprension de que hace cada metodo en los String,
vease: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Importancia de los Strings


El metodo string.lenght() retorna el numero de caracteres, no la posicion, para saber la posicion se le resta (-1) al resultado.

Una de las formas como uno puede ver los Strings es como casillas de informacion que pueden ser accesadas mediante metodos, cortadas para enfocarse solo en la informacion deseada y creada otra secuencia de caracteres con la combinacion de otros caracteres, que pueden ser visto como informacion.

Los String son la ventana para aprender a usar estructuras de datos. Por ende su importancia.

Sugerencias del como llegarle al programa.


Algunos pasos aprendidos para elaborar planos de programacion:

  • Piensa en los elementos que tienes.
  • A donde vas a llegar con estos elementos.
  • Que necesitas para llegar al resultado.
  • Elabora el plan.
  • Estudia Matematica, Matematica Discreta y escribe los psudocodes.
  • Si te enrredas y no ves salida, comienza de nuevo.
  • No le tengas miendo al problema, paso por paso. Siempre con lo que se sabe y se maneja.
  • Por lo general cuando uno se estanca en un problema es porque la logica esta mal pensada, trabaja abstractamente y fisicamente, crea dibujos, has escenarios virtuales, usa todo tipo de herramienta en el arsenal que la programacion remunera.
  • Estudia matematica, logica y matematica discreta, algoritmos, nuevamente recordar, pues es fundamental a la hora de pensar en el problema y llegar a la solucion sin desesperarte por falta de ese pequeño paso que no se ve, ya que no se sabe como hacer.

4.5.1 Concatenacion


La concatenacion es la union de un String con otro, creando asi otro Sring. 

Ahora si se usa la misma referencia, el objeto original se pierde.

La concatenacion usa el operador + para unir los String.

Cualquier numero concatenado al String se convierte en String, pero existe un metodo donde los numeros en String pueden ser transformado en numeros.

4.5.2 Substring


El metodo de Substring tiene como funcion sustraer de un String parte del String por medio de la pocision a sustraer.

public String libro = "Libros perdidos";

libro = libro.substring(0, 5);

devuelve "libros" creando otro objeto en la misma referencia, omitiendo "perdidos"

Otra forma del mismo metodo es que si solo le ponen un valor, cortara todo comenzando en ese valor.

public String prueba = "las pruebas son importantes";

prueba = prueba.substring(16);
//recuerda que el espacio es tambien un caracter en la secuencia del String
//crea otro String en la misma referencia con la informacion "importantes"

4.5.3  Tipo Char de la clase String


Como dicho anteriormente los String son caracteres unidos en secuencia por codigos, estos codigos en el lenguaje de la maquina son binarios, en el lenguaje de programacion, Unicodes. por lo mismo el tipo Char, es el caracter independientemente de la secuencia con su respectivo unicode.

El unicode entre la mayuscula y la minuscula es una diferencia de 20. 


U+0041 A &#65; Latin Capital letter A
U+0061 a &#97; Latin Small Letter A


100 0001 101 65 41 A
110 0001 141 97 61 a

Saturday, September 28, 2013

Java a lo maracucho, capitulo 4 parte I

Referencia y guia: Cay Horstmann, Big Java Edicion 4

Capitulo 4 parte I


Tipos de datos fundamentales

Metas del capitulo


  • Entender un poco sobre los numeros Integer y los Floating-point
  • Reconocer las limitaciones de los tipos numericos
  • Estar alerta sobre los errores del redondeo y del sobre exeso
  • Entender el uso correcto de las constantes
  • Escribir expresiones aritmeticas en Java
  • El como usar el tipo "String" para manipular caracteres string
  • Aprender a leer programas que introduscan y produscan un resultado formateado


Este capitulo se basa en el entendimiento del como manipular numeros y caracteres tipo string en Java. Su nucleo es el dar ejemplos y definiciones utiles para que se tengan como referencias cuando se estudie y practique el como programar en Java.


Se buscaran varias referencias, varios ejemplos, definiciones y experiencias que ayudaran a ver el como algunos tipos de dato numericos tienen limitaciones, debido a la forma como son interpretados bajo el lenguaje binario, y el como afectan al programa. Sabiendo esto muestra el como el lenguaje de programacion Java trabaja, lo demas es cuestion propia. Ademas de darles algunos ejemplos, o referencias. Lo otro sera el como usar el tipo de datos String para manipular caracteres String, el como usar los metodos de la clase String para modificarlos. Y por ultimo la entrada de datos, y la modificacion de la salida de estos de forma original.


4.1 Tipos numerales


En Java, todo valor es una referencia a un objeto, o prtenece a uno de los ocho datos primitivos. http://es.wikipedia.org/wiki/Tipo_de_dato_elemental

Seis de los datos primitivos son para los Integers y dos para los floating-points.

Cada tipo Integer tiene diferentes rangos. Los rangos estan relacionados en potencias de dos, vease 4.1.2. El integer "int" mas grande se puede representar buscando la variable estatica de la clase Integer Integer. MAX_VALUE. Lo opestos seria los mismo pero MIN.VALUE. y su rango es de un aproximado de 2.14billones a -2.14billones.

Por esta razon es muy importante saber el rango de los datos numericos puesto que el sobrepasar su capasidad puede generar una sobrecarga al valor y dar otro tipo de valor no deseado.

Por ejemplo:

int ñ = 1000000;
System.out.println(ñ * ñ); //imprime -727379968, claramente erroneo.

El producto de ñ * ñ es 10 a la 12, donde claramente sobrepasa el 10 a la 9 que puede soportar tal dato numerico. El resultado es truncado para que quepa en el int, cediendo su valor que esta mal. Lamentablemente no existe alerta en el compiler ni alerta prediseñada en el programa que pueda alertar al usuario cuando exista una sobre carga, pero se puede diseñar y para eso se estudia, para aprender de los errores.

En caso de que se calcule de antemano que el eso del int puede tener una sobre carga o exeso, es recomendable usar otro tipo dependiendo del programa, la memoria y la rapidez que debe ser empleada para su trabajo.

Hay una forma de realizar cualquier tipo de funcion aritmetica sin preocuparse mucho por el espacio y esta es el crear un Objeto de la clase BigInteger y elaborar cualquier operacion. Esta clase en mi parecer seguro es empleada en programas extensos y organicos donde no hay posible fin al proceso de calculacion aritmetica, ademas de otro tipo de funciones relacionadas a los sistemas de computador. vease: http://docs.oracle.com/javase/1.4.2/docs/api/java/math/BigInteger.html#BigInteger(byte[])

Problemas de redondeo son un problema serio con los floating-points. Errores de redondeo pueden ocurrir cuando intentan convertir numeros binarios y decimales o entre Integer y floating-points. Cuando el valor no puede ser convertido exactamente, es redondeado hasta el resultado mas cercano. Ejemplo.

double f = 4.35;
System.out.println(100 * f) // da 434.999999999999994

Este problema deriba directo del como el ALU en el procesador esta diseñado. El como es representado el numero en el sistema binario, ya que en este no existe una exacta representacion para la fraccion 1/10, al igual que 1/3.

Por esta misma razon el usar double o cualquier otro dato numerico para calcular formulas finacieras traeria errores y diferencias enormes a la larga. Una de las posible soluciones es el usar la clase BigInteger y crear objetos que cumplan con su funcion adecuada.

Los datos numericos pueden tomar otros datos numericos, pero solo para cambiar de dato.
Se sobre entiende que un int te dara un int y un double un double.

Por ejemplo:

int i = 20;
double d = i; // da 20.0

lo contrario.

double d = 2.33;
int i = d; //daria 2, sacando la parte decimal del valor.

4.1.1 Numero Grandes


Para crear numeros donde no se especifica la cantidad, y no se quiere usar el tipo "double" se crean entonces los objetos llamados Numeros Grandes, de la misma clase BigInteger, o BigDecimal para los decimales.

Estos objetos que son la extencion de la clase Number o Numero, soportan cualquier cantidad de numeros, dependiendo de la memoria que uno tenga. Y como son Objetos, tienen la facilidad de tener metodos, ya que por ser objetos y no tipos primitivos no pueden ser usados los operandos regulares como (+, -, /, *, etc), sino que tienen que ser invocados por medio de metodos especificos.

Vea aqui para mejor informacion: 

4.1.2 Numeros Binarios


Hay varias formas del como convertirnumeros decimales y fracciones en numeros binarios.

*Cada decimal tiene su valor por medio de las potencias, esta es la cantidad de valores que tiene cada unidad. 0 al 9. 10 elementos, cada uno representando cuantas unidades tiene.

*Como los numeros binarios tienen como potencia solo dos elementos. El estado "apagado" o "prendido", el 0 y el 1, diseñado para implementarse facilmente al computador por medio de sus circuitos logicos, entre otros. 

por eso el metodo para interpretar o convertir los numeros binarios en decimales es parecido a la interpretacion del como esta cumpuesto un numero decimal.

El numero decimal: 
                 
435:  (4* 10^2) + (3*10^1) + (5*10^0)

El numero binario es similar pero con un paso extra:

1101 =  (1*2^3) + (1*2^2) + (0*2^1) + (1*2^0) = 8 + 4 + 1 = 13.

Primero cada posicion tiene su potencia, de la mas alta al 0.

Otro metodo para convertir los numeros binarios en decimales es el siguente:

101011 = por cada binario, comenzando por el primero, se multiplica por dos y luego se le suma 1 si el binario es 1 o 0 si es 0.

101011 = (0 * 2) +  1 = (1 * 2) + 0 = (2 * 2) + 1 = (5 * 2) + 0 = (10 * 2) +  1  = (21 * 2) + 1 = 43

otra forma es la de saber la table hasta el 15 y todas las potencias derivadas de (2*2) (4*2) (8* 2) (16*2)...etc. ya que todos comparten la misma secuencia; 10 = 2; 100 = 4; 1000 = 8; 10000 = 16; 10000 = 32; ...

Lo otro seria convertir las fracciones:

*Las fracciones se pueden observar como la cantidad exacta que tiene un elemento y esto en programacion es increiblemente importante, por lo mismo su precicion es fundamental.

Para convertir un binario a fraccion se implementa el metodo similar usado para los decimales, fraccionandolo por potencias negativas de 2.

111.101 = 7.    (1 * 2^-1)    +    ( 0 * 2^-2 )   +     (1*2^-3) = 0.5  +  0 +  0.125 = 7.625

Ejemplo: 

1*2^-1 = 1 * 1 / 2  = 0.5
1*2^-2 = 1 * 1 / 4  = 0.25
1*2^-3 = 1 * 1 / 8  = 0.125

Ahora para convertir un decimal en binario se implementa otro metodo.

*Ya que una fraccion es lo que tiene la cantidad exacta del elemento, en este metodo, cuando sobra o queda algo luego de la operacion, esta se interpreta como un 1, sino queda nada, 0

39 / 2 | reminder 1
19 / 2 | reminder 1
9 / 2   | reminder 1
4 / 2   | reminder 0
2 / 2   | reminder 0
1 / 2   | reminder 1

Como se ve, el resto se convierte en 1 y se redondea.
*luego se saca el numero binario de abajo a arriba quedando el 100111

Con las fracciones, ya que no se reduce sino que se expanden, se multiplican por la base binaria, 2.

0.35 * 2 = 0.7
0.7   * 2 = 1.4
0.4   * 2 = 0.8
0.8   * 2 = 1.6
0.6   * 2 = 1.2
0.2   * 2 = 0.4 se repite aqui.

Ver lo que paso aqui significa saber un poco sobre las fracciones y entender que pueden dar exactas o seguir en una especie de ciclo.

Pero es muy importante observar como el 1 es el mismo elemento que sobra en la fraccion y cuando no es 0.

En este metodo se lee representando una fraccion, de arriba a abajo =  0.0101100110...se llena el resto dependiendo del numero de bits que pueda retener el tipo de data primitivo que sea usado.

Hay otro metodo para convertir automaticamente decimales a binarios y binarios a decimales, pero usando la informacio en forma de "string"

Con el metodo Integer.toString(n, 2), dandole el decimal por medio de n, y la potencia como 2(binario)


El otro metodo es el Integer.parseInt(digitString, 2) donde pasas el numero binario en el digistString, y calibras como binario en 2.


Los dos metodos devuelven un String.

Para otro tipo de informacion: http://en.wikipedia.org/wiki/Binary_number

4.2 Constantes


Las constantes son variables estaticas que no cambian de estado una vez iniciadas, ni pueden ser mutadas, son inmutables. Estan diseñadas para no repetir la misma informacion ademas de tenerla como valor fijo.

Ejemplo:

public static final double VALOR_DE_CENTAVO = 0.01;

Las palabras reservadas final transforman la variable en constante. Se escriben en letra mayuscula para diferenciarlas, pero en nada modifican su condicion el hacerlo.

4.3 Operaciones aritmeticas y funciones matematicas


En java existe lo que se llama como Orden de procedencia para los operandos, significa que cuando uno crea un algoritmo, el sistema de computacion, ALU, va a darle prioridad a los operandos que tengan mayor procedencia.

Visita la pagina para ver la tabla: 

Por lo mismo ponerle parentesis a las expresiones, el sistema ALU priotiza lo de adentro para luego ejecutar el resto.

Ejemplo:

(a + b) / 2  realiza la operacion entre a y b y luego el resultado lo divide entre 2

distinto a

a + b / 2 donde la division tiene orden de procedencia mas alto que la suma y divide b entre 2 para luego sumarle el resutado a a.

4.3.2 Incremento y decremento


En java hay un operador demaciado util, este que incrementa y decrementa los valores tipo primitivo, en especial los int

class PrePostDemo {
    public static void main(String[] args){
        int i = 3;
        i++;
        // prints 4
        System.out.println(i);
        ++i;   
        // prints 5
        System.out.println(i);
        // prints 6
        System.out.println(++i);
        // prints 6
        System.out.println(i++);
        // prints 7
        System.out.println(i);
    }
}


Aqui se puede ver como el i++ incrementa luego de pasada la instruccion y el ++i antes de pasarla. Lo mismo va con el i-- y el --i

Esta especie de operando se usa mucho en los loops como counter, etc.

4.3.3 Division del Integer


Cada tipo primitivo iria mejor con su tipo, pero aveces esa no es la respuesta y uno tiene que resolver.

El resultado de un double con un int, dependiento en que tipo de referencia guardes el resultado, dara el tipo de referencia.

int e = 4;
double r = 3.3;

r = r + e; // da 7.3
e = r - e; // da 4

4.3.4 Potencias y raices cuadradas


Para realizar las potencias o racices primero se importa la clase Math en el programa, se crea un objeto de esta clase y luego se guarda en cualquier tipo de variable.

vease la informacion de la clase Math: http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html

4.3.5 Redondeando y moldeando


Moldear un elemento significa convertir el elemento para que este pueda ser usado a otro tipo de elemento o variable.

Cuando dos nodos similares tienen que ser comparados, se moldea y convierte el nodo al tipo del nodo que se va a comparar, asi la informacion podra ser interpretada y comparada bajo un solo tipo de elemento.

por aqui se puede ver, un poco avanzado, la funcion del cast:

Sirve para convertir un objeto abstracto en el tipo de objeto especifico.

Capitulo 4 continuara en la parte II