Mostrando entradas con la etiqueta learning J.J.. Mostrar todas las entradas
Mostrando entradas con la etiqueta learning J.J.. Mostrar todas las entradas

miércoles, 29 de agosto de 2012

Un primer vistazo a Git

De la teoría y esas cosas

Git es un administrador de versiones simple, elegante, y extremadamente flexible, lo que puede resultar difícil de manejar o de aprender (Mejor dicho, de dominar). Pero quien en estos tiempos tiene tiempo para querer una vida fácil.

Git es un control de versiones distribuido, lo que significa en palabras simples: Ya no es necesario tener un servidor como en el caso de CVS o SVN, si no que ahora puedes tener tu control de versiones en tu maquina y posterior mente pasar todo esos cambios a un servidor central. Pero como diablos hacemos eso? como es que ahora puedo tener mi repositorio en mi maquina y así?

De los install y otras maravillas

Si usas windows, te recomiendo que bajes el ejecutable desde la pagina de git: dale aquí, si usas linux, existen paquetes precompilados para la mayoría de las distribuciones, por lo que ya no tendras que bajarte las fuentes y pasarte toda la noche peleándote con el make y gcc, así que abran sus consolas, sean todos poderosos (o sea, sean root) y dejen que su gestor de paquetes haga magia.

Fedora: # yum install git
ubuntu: apt-get install git-core
ArchLinux: # pagman -s git
Solais:# pkg install developer/versioning/git

En dado caso que no exista un precompilado para su linux o unix, descargen en source y hagan lo siguiente: 

# tar -zxf git-.tar.gz
# cd git-
# make prefix=/usr/local all
# make prefix=/usr/local install
Opcional: 
# make prefix=/usr/local clear

si quieren un cliente grafico, les recomiendo darle click aquí y bajar el que mas les acomode según su OS y perversiones personales.

Git es divertido

Para su desgracia, crear un repositorio es cosa fácil, por lo que las excusas quedan para CVS, mercury y otros. Pueden hacerlo con la GUI de su preferencia, por lo mientras, lo haremos de la forma artesanal (O sea, a manita desde la terminal.)

No es necesario que sean root para esto, git puede ser usado para todo usuario mortal del sistema.

Antes que nada, es importante que configuren git, eso es bueno para no ser el developer anónimo y sepamos a quien torturar en caso de subir bugs y demas cosas raras. Para ello hagan lo siguiente:

Díganle a git quien eres y dale un correo para futuros reclamos:

$ git config --global user.name "Sugizo"
$ git config --global user.email "sugi.sugi@sugimail.com"

Git también te permite indicarle cual es tu editor de confianza, como nano, vi, emacs etc, esto es opcional, pero si quieres hacerlo, estaría genial: 

$ git config --global core.editor vim

Si quieres ver tu configuración global, sólo teclea el siguiente comando:

$ git config --list
ó
$ vim ~/.gitconfig

Recuerda algo importante, si tienes duda de algún comando, git tiene un help y un man para esos casos.

$ git help
usage: git [--version] [--exec-path[=]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=] [--work-tree=] [--namespace=]
           [-c name=value] [--help]
            []

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and merge with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

See 'git help ' for more information on a specific command.


Del init, add y otras maravillas

Antes, para crear un repositorio tenias que sacrificar una cabra a media noche y con luna llena. Pero ahora, invocar al demonio es cosa de un par de comandos simples: 

$ cd miProyecto
$ git init

Esto te va a crear una carpeta oculta .git donde tendrás una estructura parecida a esta

.git/
|-- branches
|-- COMMIT_EDITMSG
|-- config
|-- description
|-- HEAD
|-- hooks
|   |-- applypatch-msg.sample
|   |-- commit-msg.sample
|   |-- post-update.sample
|   |-- pre-applypatch.sample
|   |-- pre-commit.sample
|   |-- prepare-commit-msg.sample
|   |-- pre-rebase.sample
|   `-- update.sample
|-- index
|-- info
|   `-- exclude
|-- logs
|   |-- HEAD
|   `-- refs
|       |-- heads
|       |   `-- master
|       `-- remotes
|           `-- origin
|               `-- master


Es recomendable que hagas un primer commit a tu repo, ya sea que tengas código o puedes agregar un simple README, da igual, la cosa es que sepas como se hace.

$ git add *.java
$ git commit -m "agregado algo al repo feliz"

El -m indica que es necesario un mensaje para identificar al commit que estas subiendo, es recomendable que ese mensaje sea la descripción de lo que subes, ya sea una nueva funcion, una modificación o una buena excusa para decir que corre con problemas y tiene muchos bugs y que es mejor no ejecutar para no borrar toda la base de datos, digo, por si las dudas, mejor que este bien claro. XD

Vieron, no fue cosa del otro mundo.

De los ejércitos imperiales y las guerras clon.

Pero que pasa si ya hay un repositorio en un server o en github y yo quiero descargarlo en mi maquina para poder modificarlo a cuchillo cincel y martillo??

Bueno, para estos casos, git es igual de amable y flexible, y no es necesario mas que el comando clon para poder clonar el repositorio a nuestra compu para poder trabajar.

git clone https://github.com/sugisugi/unProyecto.git []

En dado caso de que ustedes no especifiquen una carpeta, git creara una carpeta con el nombre del proyecto.

Por último y no menos importante. Supongamos que ya hicimos muchos commits en nuestro git local y todo bien padre, pero tenemos un github al cual quieremos subir todo el desmadre que hicimos en nuestra computadora, pero como demonios invoco a la fuerza para que haga tan noble labor sin necesidad de llamar al lado obscuro?

No necesitas mas que decirle al git de tu proyecto cual es el repositorio remoto al cual conectaras tu master:

$ git remote add origin https://github.com/sugisugi/unProyecto.git
Y para subir tus cambios del local al github, usa el parámetro push
$ git push -u origin master
te pedirá el usuario y el password.

Y con esto, ustedes ya pueden jugar con git felizmente toda la noche. En un post posterior explicare como hacer algunas funciones un poco mas avanzadas. Es recomendable que se den un tiempo para leer la documentación oficial para que sepan mas sobre como funciona un control de versiones y como git hace todo su trabajo como las ramas, los tags y otras maravillas que esta herramienta les puede ofrecer. 

Puedes hacer todo esto con la GUI o con el plugin para ti IDE de confianza. Si eres usuario de windows, no tienes excusa, git te instala un emulador de bash con los comando básicos de linux y los comandos de git para que puedas replicar los vistos aquí sin ningún problema.

Con amor, Sugizo.

lunes, 19 de octubre de 2009

Notas sobre Java (Más teoría)


Java es un lenguaje Orientado a Objetos (POO), es decir que define a los programas en términos de 'clases de objetos' que son entidades que cambian de estado o es mejor decir, de datos. La programación orientada a objetos establece que un programa como un conjunto de estos objetos que se comunican entre ellos por medio de métodos. Esto métodos están pensados para hacer los módulos más fáciles de escribir, mantener y reutilizar.

La programación orientada a objetos establece ciertas características:

  • Abstracción.
  • Encapsulación.
  • Polimorfismo.
  • Herencia.
así que entremos al tema con mucha materia y poca saliva.

Abstracción: Cada objeto en el sistema sirve como un agente que puede realizar un trabajo, informar y cambiar su estado, y así mismo comunicarse con otros objetos sin revelar como se implementa.

Encapsulación: A esto también se le conoce como "ocultamiento de información", esto asegura que los objetos no pueden cambiar el estado interno de otros objetos.

Polimorfismo: La capacidad de una clase de comportarse como otra, asi de fácil, así de simple.

Herencia: Esta es la parte linda, es la que organiza y facilita el polimorfismo y la encapsulación, así permite la creación de objetos especializados que pueden compartir su comportamiento sin necesidad de reimplementarlo.
Estructura de una clase en Java

  1. package: Declaración del paquete.
  2. import: Uso de clases de un paquete externo.
  3. class: Definición de la clase.
Sintaxis:

package < 'ruta del paquete' >
< 'Modificador de acceso' > class < 'nombre' > {
< 'Delcaración de atributos' >
< 'Declaración de Construcctor' >
< 'Declaración de métodos' >
}
Modificador de acceso

  • Friendly: Es el acceso por default. No tiene una palabra clave asociada, por lo que se le denomina como acceso amistoso y pueden ser accesadas por clases del mismo paquete.
  • Public: Puede ser accesada por cualquier miembro del paquete o de otros paquetes.
  • Private: No puede ser accesada por otra clase, únicamente por medio de métodos publicos.
Declaración de atributos y datos primitivos



< 'Modificado de acceso' >< 'tipo' >< 'nombre' >[=< 'valor' >]

Tipo de datos primitivos

Typo Valor
  • bolean = false
  • byte = 0
  • char = '\u0000'
  • short = 0
  • int = 0
  • long = 0L
  • float = 0.0f
  • double = 0.0d
Este tipo de datos tiene una contraparte o una clase especializada llamada Wrapper.

Pero ya hablaremos de eso en otra ocasión, por ahora es momento de decir adios y nos veremos la próxima.

martes, 13 de octubre de 2009

Notas sobre Java (Teoría)

Java es uno de los lenguajes más populares para aplicaciones basadas en web y dispositivos que se comunican por red.

Historia.

En 1991 se creo un proyecto interno en Sun Microsystem denominado Green. El plan era desarrollar un lenguaje basado en C++ que en un inicio se llamo Oak, culpa de un roble que se podía ver desde la oficina de James Gosling, su creador. Pero ya existia un lenguaje con ese nombre, por lo que mas adelante se le llamo Java, cuando un grupo de generentes visitaron una cafetería local.

Java fue creado para el mercado de dispositivos electrónicos inteligentes. Por desgracia, la proyección de Sun fue errónea y este tipo de dispositivos no se desarrollaban tan rápido. Así que el proyecto corrió con la suerte de ser cancelado. En 1993 exploto la popularidad de Internet y los chicos de Sun se dieron cuenta de que Java podía agregarle Dinamismo a las estaticas paginas creadas en html vil y villano.

En 1995, Sun Microsystem dio a conocer Java dentro de una conferencia y su fuerte fue los actuales y extintos Apples dentro de las paginas de Internet y se gano el corazón del mundo de los negocios, así como aplicaciones para dispositivos móviles como los celulares y radiolocalizadores.

Java se divide en tres ediciones que son:

  • Java Standar Edition (Java SE).
  • Java Enterprise Edition (Java EE) Orientada a las aplicaciones de redes a gran escala y aplicaciones basadas en web.
  • Java Micro Edition (Java ME) Orientada al desarrollo de aplicaciones para dispositivos moviles con memoria limitada.
Entorno de desarrollo en Java

La programación en Java pasa por 5 etapas:

  • Edición
  • Compilación
  • Carga
  • Verificación
  • Ejecución
Etapa 1

En esta primer etapa, es la parte donde escribiremos el programa ayudados por un editor. Posterior mente guardaremos el archivo bajo la extención '.java'.


Por ejemplo, suelo usar los editores vi o emacs para entornos Linux, pero para el campo de guerra necesitamos poder. Para ello existen los Entornos de desarrollo integrado (IDE's).


Entre los mas populares tenemos:
Etapa 2

Para compilar un archivo .java, es necesario hacerlo con el archivo javac, que es el compilador.

Por ejemplo, supongamos que trabajamos con vi para hacer un pequeño programa y es hora de saber si podemos seguir o nos detenemos a ver errores. Desde una shell podemos hacer lo siguiente:

[Sugizo@old ~]$javac HolaMundo.java

si no detecta ningun error, nos generara un archivo '.class' a la cual llamamos 'Byte Code' que será lo que la Maquina Virtual de Java (JVM) usara para hacer las tareas que hemos escrito.

Para ejecutar este programa es tan fácil como escribirn en nuestra terminal lo siguiente:

[Sugizo@old ~]$java HolaMundo

Y veremos en terminal o por Interface grafica de usuario (GUI) el resultado.

Etapa 3

Para poder ejecutar el programa, este debe cargarse primero a memoria, de lo que se encarga el cargador de clases. el cargador también carga cualquiera de los .class de las librerías que el programa use.

Etapa 4

A medida en que se cargan las clases, existe un componente interno conocido como el verificador de Byte Code que examina las clases para asegurar que sean correctos y no violen las restricciones de seguridad.

Etapa 5

En este punto, la JVM ejecuta los Byte Code. Antes esta parte era la mas pesada ya que la Maquina virtual interpretaba bytecode por bytecode, ahora es mas eficiente gracias a algo llamado Just in time (JIT), esto hace que se interpreten a medida de que busca puntos activos del programa. Es decir, partes del codigo que se ejecutan con frecuencia.

Ahora bien, instalar Java en Windows es tan fácil como dar doble click. Pero para hacerlo desde linux, basta seguir estas instrucciones.

Besitos.