jueves, 13 de marzo de 2014

La filosofía del Ruby* como lenguaje de programación. Segunda parte.

¿Que son los Items?
Esta pregunta es imporante interesante y muy filosofica.

Para ellos empezaremos desde cero, en Ruby todo son objects (objetos), desde strings(comillas), integers (enteros) hasta las ".class". de hecho el ser supremo de Ruby se llama Object que a su vez contiene BasicObject. la cual es la clase suprema.

¿Quieres probar? Pon cualquier palabra, numero etc... por ejemplo dentro de irb en la consola y probad lo siguiente.

irb
> String.superclass
=>Object

>Numeric.superclass
=>Object

Por último e importante para un ejemplo de abajo. 
Class.superclass
=>Module
Module.superclass
=>Object

Aquí hay un dibujo muy artístico
http://i.stack.imgur.com/XDHjA.jpg

Class, viene definida como una librariea o bliblioteca (Library) donde tengo objetos de un mismo grupo classificados. Todos absolutamente todos los objetos pertenecen a una ".class" por ejemplo los numeros enteros (Integers) pertenecen a class Fixnum y todas las .class siempre tienen la primera letra en mayúscula.

Por ejemplo, todos los animales estan dentro de "class. Animals" y cada uno de estos animales son objetos en Ruby también y cada objeto tiene diferentes atributos. por ejemplo, los perros tienen 4 patas y una cola, las gallinas tienen 2 patas un pico y una cola. Dentro de esos objetos cada uno de ellos es un ente único, pero a ese ente no le llamamos así, a ese ente en Ruby se le llama Instance (o Instancia).

Ejemplos faciles y rapidos de Steve:
Tu, estas en la clase ser vivo, dentro de la clase ser vivo estas como subclase ser humano, los seres humanos tenemos atributos como, capacidad cognitiva, 2 brazos 2 piernas etc... y tu eres un unica Instancia vendria a ser (un ser o un ente si generalizamos aún más)

Así que si te ha quedado claro que es una instancia ¿Como la escribirias en una sola frase?

Trata de hacerlo y una vez lo hayas hecho mira se parece a esta definición.

Todos los objeto que estan dentro de una  determinada .class, tienen determinados atributos que les hace pertenecer a una determinada categoria, y cada uno de estos objetos son únicos y se les llama Instancia.

¿Cual de estos ejemplos seria una instancia y cual no?

1. x = Box
2. x = box
3. x = ''Box"
4. x = 123
5. x = a
6. x= Box.new

1. Box será un archivo .class ya que está en mayusculas, no será una instancia.
2. box es una instancia
3. "Box"  aunque esté en mayusculas es una instancia ya que está dentro de unas dobles comillas (string).
4. 123 es una isntancia dentro de class Fixnum 
5.  Tambíen a es una Instancia, ya que está en minuculas
6.  Box.new es una instancia! es una nueva .class creada  desde la .class Box. Cuando creamos una class a partir de una class creamos un objeto como una instancia dentro de la clase Module! Si creamos algo seräa una isntancia aunque sea creada a partir de una .class .
Es como si de un catalgo de la biblioteca de cajas crearamos otra biblioteca de catalgo de cajas ese catalogo es un modulo en si z por tanto un item o como ya conocemos una Instancia.

Consejos hacer los ejercicios relacinados con esto desde este link;
http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm





lunes, 10 de marzo de 2014

La filosofía del Ruby* como lenguaje de programación. Primera parte.

Haciendo un breve resumen... Olvidaros de Ruby on Rails... Eso tardara un rato... Tenemos que empezar con Ruby, de otra forma no entenderiamos del todo que hace Rails. Así que hablando con mi jefe decidí que me centraría en ruby. Y para ello el y mis colegas de trabajo me dieron una pequeña introduccción que os comparto,

Ruby es más flexible, facil de leer y no se repite, por ejemplo si comparamos con Java, Ruby se carga cada vez que añadimos algo dentro de el irb. Mientras que en Java se tiene que poner a cargar cada vez que deseemos er si funciona o no. Eso hace que Java sea más rapido a cargar de golpe todo mientras que en eso Ruby si que es más lento. Eso no es malo, todo tiene sus pros y contras.

Ruby tiene:

 - Una sola herencia ( no se repite)
- method overriding (tienes la posibilidad de estar sobrecargando una función que no se encuentra definida en el padre del que heredas)
- namespaces (Un espacio de nombres es un contenedor abstracto en el que un grupo de uno o más identificadores únicos pueden existir.)
- class(estaticos) variables y metodos,
- patterns como los singletons ( (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.)
- duck typing (enfocado a objetos)
!
Ruby NO tiene:
!
-Interfaces (ya que es flexible de tipos), pero mixins permiten secciones estándar de código para ser 
incluido y reutilizados en clases. Se permiten múltiples mixins. 
- Método de la sobrecarga (pero los métodos pueden tener argumentos opcionales).


Hay que diferenciar enre Arrays, ordered list of elements o cadenas, strings double quotes o dobles comillas objetos, container executung code pipes , traverse, block o tubos o bloques contenedores de codigos de ejecución, value items o items de valor, objetcts, values state u objetos, Integeres o numeros enteros, float o con decimales, class hash o asterisco de clase. Ire añadiendo... : 

Ejemplo:

Comida = ["huevos",  21,  :champiñones]
     nombre del  = Ashes["strings", 1nteger, symbol]
     main object            

def
 defincición o metodo

  
end
cierre del/ de_los comando/s

class
clase o tipo (endtro de la clase escribiremos los atributos) **
object.new 
objeto.constructor (new), es decir, cada vez que veamos (.new) es un constructor.
  
end

if
 acción o metodo en caso de.. 
  
end

if else
cualquier metodo diferente a los definidos
  
end


Arrays [abc, def]
Ashes [] &/or {}
Items(ex.ejemplo de 2 items) abc, def
Strings "abc"
Symbol (unmutable string):abc
Block ||
integers 1 2 3
float 0.001 3.1416 ...
object .abc

Otras notaciones.
Dentro de un objeto ... clave=>valor

"Un objeto es un contenedor de datos, que a su vez controla el acceso a dichos datos. Asociados a los objetos está una serie de variables que lo definen: sus atributos. Y también un conjunto de funciones que crean un interfaz para interactuar con el objeto: son los métodos."
Fuente: http://rubytutorial.wikidot.com/clases-objetos

Block sirve para Iterar(Iterating) repetir un comandos en diferentes items.
Los Items pueden ser:
- Objetos,  :huevos, :24
- Strings "queso", "24"
- Integers "34, 27" 
Los Items si son una lista vienen dentro de ashes,pero si es un solo item a veces no hace falta.
Para añadir items existen comandos y simplemente usando esa notación podemos especificar el item utilizando la notación. Por ejemplo, en el caso de strings puede ser muy util la lista de Strings! muchas veces se puede utilizar la misma notación para añadir intgerers to_i o strings to_s...


**: acerca de class escribiré y traduciré el documento, pero por ahora podeis ver el contenido en ingles aquí:
http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm
 La guía es una maravilla!

domingo, 16 de febrero de 2014

Listo para centrarse y empezar a tiempo completo!

Han sido meses bastante duros y habia dejado el Ruby a un lado, ya que andaba muy mal de dinero y buscaba un trabajo de lo que fuera. Paso algo increible y creo que he tenido mucha suerte y buena gente a mi alrededor que confia en mi y ha hablado bien de mi :).
!Mañana empiezo a trabajar en una empresa¡ Y aunque estoy algo nervioso ¡Estoy feliz! El nombre de la empresa es lo de menos ;)...  El caso es que empezare de nuevo desde cero voy a ponerme a estudiar a tiempo completo, para mi es un master en Ruby on Rails, mejor aún! Un master pagado con muy buenos tutores y en una empresa con mucha gente muy maja, incluyendo Bea!
Así que ire escribiendo cada cosa...Para empezar y refrescar la memoria nade mejor que una introducción a el Ruby,  Bea me pasó el link el día de hoy...Ya se m habia olvidado la web!

Auí está: http://tryruby.org
Gracias a code school :).
Ok, pues trasteando un poco quiero recordar conceptos básicos que a veces se nos olvida el nombre y en un momento dado es importante.

lunes, 13 de enero de 2014

Posible fallo al instalar RVM "Failed to fetch http://ppa.launchpad.net/ 404 Not Found"

Para usar Ruby on Rails casí todos recomiendan usar el RVM pero a mi me dio un quebradero de cabeza por que me salia este error "Failed to fetch..404 not found" siempre y no me dejaba instalarlo.
Por fin esta solucionado! Se lo debo en parte a una amiga, Bea me ayudo bastante con todo.
Como su nombre lo indica hay un error en algunos paquetes que no existen tipico "error 404 file not found"... Y por alguna razón que desconozco no te permite instalar RVM por culpa de estos paquetes y links rotos.
Hay que remover estos errores de paquetes y/o links rotos que ya no existen...

Paso 1.
Abrir la terminal y escribir:
sudo apt-get update
Actualizara todos los paquetes a la ultima versión y entonces nos saldra el paquete que no existe.
Puedes ver que no existe coipando la url o dirección <ctrl-alt-c> y pegandola en tu navegador...veras que no encuentra la pagina.
Fijate bien en el nombre del archivo que falla.

Paso 2.
Ahora bien para eliminar esto, si no esta en tus repositorios mucho mejor. Revisa si esta ahí. En mi caso los paquetes no existentes eran 2 los 2 relacionados con "Wingpanel".


gedit /etc/apt/sources.list
Al buscarlo <ctrl-alt-f> y escribiendo "wingpanel" no encuentro nada.
Si lo encontraras tendrias que borrarl las lineas y guardar cambios. Fijate bien que estas borrando lo correcto.
Paso 3.
Ve al "Software center" o "Centro de Software o aplicaciones" arriba en las pestañas veras "editar" o "edit" , ve a la opción de "Software Sources" y una vez allí ve a "Other Software" tendria que estar allí el problema.
Quita las palimitas habilitadas "V" te pedira la contraseña de "root" o de usuario raiz ponla y listo...

Paso 4.
Cierra tu terminal y vuelve a abrir una nueva.
vuelve a poner sudo apt-get update y sorpresa!
Si no has tenido ningun error al hacer lo siguiente y en general, no te saldra más este error y ahora si podras instalar la ultima versión de RMV.

Para instalar RVM os recomiendo esta guía:
http://ruby.about.com/od/rubyversionmanager/ss/installrvmlinux.htm
Buena suerte y cualquier duda y/o comentario no dudes en escribirme.

jueves, 2 de enero de 2014

Lección 0. Comandos básicos en terminal y una buena guía para Ruby

Como me recomendo mi amiga Anita que empezó a programar practicamente desde cero,  usad "Ruby on the hard way". Podeis descargaros el libro por 2.99€. o verlo online, a mi me parece más comodo en PDF. O si quereis me podeis contactar y os paso la versión que tengo. es legal pasarlo :). Si no sabes que hacer con 30€ tambien podeis comprar el libro...


Aquí dejo algunos comandos básicos de la Terminal que tendreis que aprender como yo lo estoy haciendo.

Abrís terminal: ctrl+alt+T<-teclear*


Comandos en Terminal:

1.- run"cargar" irb (Interactive Ruby): irb
2.- Salir del irb o de cualquier aplicación que has cargado en la terminal: ctrl+d <-teclear*

3.- Para ver las carpetas que tienes:
ls

4.- Ver todas las carpetas(incluso las escondidas): 
ls -a

5.- Para entrar a una carpeta "change directory":
cd nombre_de_carpeta*
*Si entras en una carpeta directamente desde tu directorio inicial aparecera  ~  significa que es el directorio de inicio ().

6.- Crear carpeta y archivos:
6.1.- Crear una carpeta:

mkdir nombre_que_quieras
6.2.- Crear un archivo:touch nombre_que_quieras.ext
7.- Volver a la carpeta anterior:
 cd /

8.- Borrar toda la informacion anterior en la terminal "solo visualmente":
clear

9.- Copiar un archivo: 
cp archivo_original_y_extension archivo_nuevo.ext

10.- Mover archivo y/o cambiar nombre del archivo (move):
 
mv archivo.extension carpeta_deseada/nombre_nuevo.ext

11- Ver un archivo de texto:

11.1.-Corto (concatenate):  
cat archivo.extension

11.2.-Largo:  
less archivo.extension*
*Para bajar y buscar en el 11.2.(archivo extenso):  / texto_a_buscarINTRO.
  Para salir apretar: q

12.-Para ver la dirección completa de tu ubicación en las carpetas (Print working directory): pwd

13.- Borrar archivo (remove): rm nombre_del_archivo.ext

14.- Entrar a una carpet con espacio entre palabras :  cd nombre \segundapartenombre

*es decir espacio barra inversa continuación del nombre.

Al final pondre ejemplos de cada uno de estos casos para que sea más claro.