tag:blogger.com,1999:blog-47522524907432973292024-03-12T20:06:58.871-07:00Camino a ser Jr. Ruby Developer haciendo @BerlinProgramador Junior aprendiendo Ruby y con vida feliz en Berlin :). Ruby, RoR y Linux! Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-4752252490743297329.post-91328210457063455002018-03-13T17:07:00.002-07:002018-03-18T15:30:41.914-07:00La mejor entrevista que me han hecho como desarrollador en Ruby on Rails<span style="font-size: x-large;">Bueno, no pude evitarlo. Quiero explicar es agradable experiencia independientemente de que continue (que espero que si) o no el proceso.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Tuve una sesion en Skype con el CTO de una gran empresa con sede en Alemania. Empezamos con una breve intro acerca de mi y de el.</span><br />
<span style="font-size: x-large;">Unos minutos despues me dijo que iba a preguntarme algunas preguntas teoricas acerca de ruby y de rails.</span><br />
<span style="font-size: x-large;">Las preguntas no tienen desperdicio:</span><br />
<span style="font-size: x-large;">Empezamos con lo más básico.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Cual es la diferencia entre una clase y un modulo. A groso modo Classes se pueden instanciar y pueden tener herencia de otras clases modulos no. Los modulos sirven más separar codigo y ordenarlo.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Que es un "singleton method" es una forma de "garantizar que una clase sólo tenga una instancia, y proporcionar un punto de acceso global a ella".<br />Segun wikipedia:</span><br />
<br />
<span style="font-size: x-large;">En <a href="https://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software" title="Ingeniería de software">ingeniería de <i>software</i></a>, <i><b>singleton</b></i> o <b>instancia única</b> es un <a href="https://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o" title="Patrón de diseño">patrón de diseño</a> que permite restringir la creación de <a href="https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" title="Programación orientada a objetos">objetos</a> pertenecientes a una <a class="mw-redirect" href="https://es.wikipedia.org/wiki/Clase_(programaci%C3%B3n_orientada_a_objetos)" title="Clase (programación orientada a objetos)">clase</a> o el valor de un tipo a un único objeto.</span><br />
<span style="font-size: x-large;">
</span><span style="font-size: x-large;">Su intención consiste en garantizar que una clase sólo tenga una <a href="https://es.wikipedia.org/wiki/Instancia_(inform%C3%A1tica)" title="Instancia (informática)">instancia</a> y proporcionar un punto de acceso global a ella.</span><br />
<span style="font-size: x-large;">
</span><span style="font-size: x-large;">El patrón <i>singleton</i> se implementa creando en nuestra clase un <a href="https://es.wikipedia.org/wiki/M%C3%A9todo_(inform%C3%A1tica)" title="Método (informática)">método</a>
que crea una instancia del objeto sólo si todavía no existe alguna.
Para asegurar que la clase no puede ser instanciada nuevamente se regula
el alcance del <a href="https://es.wikipedia.org/wiki/Constructor_(inform%C3%A1tica)" title="Constructor (informática)">constructor</a> (con <a class="new" href="https://es.wikipedia.org/w/index.php?title=Modificador_de_acceso&action=edit&redlink=1" title="Modificador de acceso (aún no redactado)">modificadores de acceso</a> como protegido o privado).</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Que clases de variables hay en un modulo? Esta pregunta es trampa y no lo habia pensado. De hecho no estoy seguro. Le dije que obviamente las "instance variables" solo se pueden usar para una clase. Habra que revisar eso. Luego tambien que el alcance de una variable es solo dentro del modulo, nada nuevo en eso.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Cual es la diferencia entre extende e include.</span><br />
<span style="font-size: x-large;">En resumen seria, cuando añadimos un modulo en el objeto con include añadimos metodos en la cadena de herenncia de ese objeto.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Cuando usamos extend es lo mismo que include con el objeto de clase "singleton"</span><br />
<span style="font-size: x-large;">ejemplos.</span><br />
<br />
<span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;">class A</span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"> include M</span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;">end</span></span><br />
<span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"><br /></span></span>
<pre class="highlight" style="box-sizing: border-box; color: #222222; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"><code style="background-color: white; border: 0px none; box-sizing: border-box; padding: 0px;"><span class="no" style="box-sizing: border-box; color: teal;">A</span><span class="p" style="box-sizing: border-box;">.</span><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">ancestors # => [A, M, Object...]</span></code></span></span></pre>
<pre class="highlight" style="box-sizing: border-box; color: #222222; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"><code style="background-color: white; border: 0px none; box-sizing: border-box; padding: 0px;"><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">
</span></code></span></span></pre>
<pre class="highlight" style="box-sizing: border-box; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"><span style="color: #990000; font-family: Consolas, Courier, monospace;"><span style="background-color: white;"><b>####</b></span></span></span></span></pre>
<pre class="highlight" style="box-sizing: border-box; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;">class<span style="background-color: white; color: #222222; white-space: normal;"> </span><span class="nc" style="background-color: white; box-sizing: border-box; color: #445588; font-weight: 700; white-space: normal;">A</span></span></span></pre>
<pre class="highlight" style="box-sizing: border-box; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"> <span class="kp" style="background-color: white; box-sizing: border-box; color: #222222; font-weight: 700; white-space: normal;">extend</span><span style="background-color: white; color: #222222; white-space: normal;"> </span><span class="no" style="background-color: white; box-sizing: border-box; color: teal; white-space: normal;">M</span></span></span></pre>
<pre class="highlight" style="box-sizing: border-box; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;">end</span></span></pre>
<pre class="highlight" style="box-sizing: border-box; overflow: auto;"><span style="font-size: small;"><span style="font-family: "Courier New", Courier, monospace;"><span style="background-color: white;"><span style="color: #990000; font-family: Consolas, Courier, monospace;"><b>A.singleton_class.ancestors # => [M, Class, Module...]</b></span></span></span></span></pre>
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Auque podemos llamar extend en una instancia asi.</span><br />
<pre class="highlight" style="box-sizing: border-box; color: #222222; font-size: 16px; overflow: auto;"><span style="font-family: "Courier New", Courier, monospace;"><code style="background-color: white; border: 0px none; box-sizing: border-box; font-size: 1em; padding: 0px;"><span class="n" style="box-sizing: border-box;">a</span> <span class="o" style="box-sizing: border-box; font-weight: 700;">=</span> <span class="no" style="box-sizing: border-box; color: teal;">A</span><span class="p" style="box-sizing: border-box;">.</span><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">new</span>
<span class="n" style="box-sizing: border-box;">a</span><span class="p" style="box-sizing: border-box;">.</span><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">extend</span><span class="p" style="box-sizing: border-box;">(</span><span class="no" style="box-sizing: border-box; color: teal;">M</span><span class="p" style="box-sizing: border-box;">)</span>
<span class="o" style="box-sizing: border-box; font-weight: 700;">></span> <span class="n" style="box-sizing: border-box;">a</span><span class="p" style="box-sizing: border-box;">.</span><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">singleton_class</span><span class="p" style="box-sizing: border-box;">.</span><span class="nf" style="box-sizing: border-box; color: #990000; font-weight: 700;">ancestors</span>
<span class="c1" style="box-sizing: border-box; color: #999988; font-style: italic;"># => [M, A, Object, Kernel, BasicObject]</span></code></span></pre>
<br />
<span style="font-size: x-large;">Por que usar rspec . Le dije que en lo personal me gusta por que es muy descriptivo y es lo más parecido al pseudocódigo para saber por donde empezar a trabajar haciendo test driven development. adermás de que si estsan bien escritos es muy facil encontrar errores.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Rails. como usar helper? Me preguntó como accedia helper y bueno, me maté la cabeza tratando de entederlo pero simplemente es automatico está incluido detro de rails. Le dije que lo importante aquí es que helper lo usamos para añadir metodos para las vistas y que en los modelos normalmente guardamos la logica y en controller es solo el director de la orquesta que distribuye y lleva los metodos de model a las vistas.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">problema de usar n+1 en activerecord queries. Aquí me confundi. Se me habia olvidado este concepto. El final me explico lo que se me habia olvidado. n+1 significa cuado estmos haciendo loops en los datos para tomar un metodo especifico y así obtener un atributo dentro de las peticiones(queries). En lugar de hacer ese loop que es muy costoso en memoria podemos hacer una peticion connnnn where y find. Este tema y los anteriores los desarollare en otros posts. Por ahora quí queda.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Me gusto muchisimo la entrevista. El hombre era humilde directo, con preguntas muy acertadas y encima capaz de empatizar y explicarme en lo que habia fallado.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Por ultimo y algo que me parecio digno también de reconocimiento es que me explico antes de que yo preguntara todo lo que queria saber acerca del workflow, metas y problemas actuales, tecnologias que usan, buenas practicas, arquitectura .</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Así fue y para mi gusto, así deberian las entrevistas.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Pragmaticas, constructivas, humildes y trasparentes.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Sin duda alguna, una de las mejores entrevistas que me han hecho, quiza la mejor.</span><br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-58131454706112335062018-03-03T07:03:00.001-08:002018-03-03T07:03:17.807-08:00Instalar Linux desde ceroElige la distro de tu preferencia, teniendo en cuenta tus GB en RAM, procesador, experiencia en linux y documentación disponible o conociendo que usa tu equipo.<br />
<br />
En mi caso tengo 1GB en RAM y un pentum Celeron ual core a 1.5 , si si lo sé necesito un Portatil/Laptop nuevo...<br />
<br />
Así que mis opciones se estrechan a 4-5 distros decentes.<br />
<br />
1. Lubuntu, muy rapido y funcional para un equipo viejo como el mio<br />
2. Xubuntu, Bastante bien de diseño, casi igual que ubuntu, solo que para equipos más viejos.<br />
3. LXLE Una version diferente de Lubuntu, mucho más bonita y funcional<br />
4. Elementary OS, el mejor diseño de los 4 con prestaciones parecidas a Xubuntu pero más moderno y rapido para empezar, aunque luego hace falta un poco más de dedicación para personaizarlo y trabajar con un entrono de desarollador.<br /><br />
Al final me decidí por LXLE aunque tuve problemas con la instalación varias veces e hice un cambio de planes a ultima hora por elementary. Mis unicas quejas son que tuve que costumizar muchos de los shortcuts ya que está pensado mas para usuarios muy principiantes y poco para usuarios de Ubuntu ( que fue y es la distro con la que me siento más comodo pero que no puedo usarla por que piden 2GB en RAM como minimo y 4GB recomendados).<br />
<br />
Ok. Así que, una vez instalado Elementary fuí añadiendo cosas:<br />
<br />
Temas para Pantheon-Elementary (La terminal por defecto de Elementary OS)<br />
1. https://github.com/Mayccoll/Gogh/blob/master/content/themes.md<br />
<br />
Luego para cambiar iconos etc, aquí esta la mejor fuente que he encotrado:<br />
2. http://www.linuxandubuntu.com/home/how-to-install-themes-or-icons-in-elementary-os<br />
<br />
Ahor vamos a lo básico como developer.<br />
<br />
Felizmente alguien se me adelanto con todo esto, y que mejor que un developer amante de Elementary OS!<br />
<br />
https://adam.merrifield.ca/2016/09/20/web-development-on-elementary-os-0-4-0-loki/<br />
<br />
Para instalar Rails. Siempre he usado y me ha gustado<br />
https://gorails.com/setup/ubuntu/16.04<br />
<br />
Un error común es cuando tenemos instalado Ruby en el sistema operativo por defecto. Por lo menos en RVM hay un problema. Pirmero hay que desinstalar Ruby y luego instalar RVM y ruby desde RVM.<br />
<br />
Para Instalar Docker!<br />
https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository<br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-18859336555205297042017-03-27T09:41:00.003-07:002017-03-27T09:50:11.712-07:00Como colaborar en un repositorio de código abierto<span style="font-family: inherit; font-size: x-large;">No es tan sencillo como pensaba, pero tampoco es difícil.</span><br />
<span style="font-family: inherit;"><span style="font-size: x-large;"><span style="font-family: inherit; font-size: large;"><span style="font-size: x-small;"><br /></span></span></span><span style="font-size: x-large;"><span style="font-family: inherit; font-size: large;"><span style="font-family: inherit; font-size: xx-small;">Así es como lo he hecho:</span></span></span><span style="font-size: x-large;"><span style="font-family: inherit; font-size: large;"><span style="font-size: xx-small;">1. Se hace fork al proyecto adonde queremos cooperar/colaborar (apretar el boton de fork)</span></span></span></span><br />
<span style="font-family: inherit; font-size: x-large;">2. Vamos al repositorio que está en nuestra cuenta (el fork en si)</span><br />
<span style="font-family: inherit;"><span style="font-family: inherit; font-size: x-large;">3. </span><span style="font-family: "courier new" , "courier" , monospace;">git clone nuestro-repo-fork</span></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit; font-size: x-large;">4. Entramos a nuestra carpeta y vemos que efectivamente esta el remoto vinculado a nuestra cuenta:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">git remote -v</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit; font-size: x-large;">3. agregamos el directorio remoto del otro proyecto:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">git remote add upstream repositorio-de-la-cuenta-donde-queremos-colaborar</span><br />
<span style="font-family: inherit;"><span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">4. Abrimos una rama nueva en nuestra carpeta</span></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">git checkout -b 'nueva_rama'</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><span style="font-size: x-large;">5. Una vez ahí hacemos los cambios que queramos para poder hacer el </span><span style="font-size: large;">'</span><span style="font-family: "courier new" , "courier" , monospace;">pull-request</span>'</span><br />
<span style="font-family: inherit;"><span style="font-size: large;"><br /></span>
<span style="font-size: x-large;">6. hacemos commit:</span></span><br />
<span style="font-family: inherit;">git add 'lo que queramos agregar'</span><br />
<span style="font-family: inherit;">git commit -m ' nombre del commit'</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit; font-size: x-large;">7. hacemos push al repositorio remoto del que queremos cooperar:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">git push upstream nombre-de-mi-rama-con-mis-cambios</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;"><span style="font-size: medium;"><span style="font-size: x-large;">8. vamos a github*(en este caso es el ejemplo) y creamos pull request.</span><span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> </span></span><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">'create pull request</span>'</span></span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit; font-size: x-large;">9. Agregamos comentarios y abrimos Pull request.</span><br />
<span style="font-family: inherit; font-size: x-large;"><span style="font-size: x-small;"><br /></span>
<span style="font-size: x-small;">10. Esperamos la contestación y seguimos con el típico procedimiento de arriba.</span></span>Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-37516754066054611602016-05-09T09:10:00.000-07:002016-05-09T09:10:29.186-07:00Metodos y Nombres nombres nombres....<span style="font-size: x-large;">He encontrado esto:</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">- methods that do something should be verbs:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.calculate</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.set_name</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.get_date</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">- methods that are accessors (or behave like them) should be nouns:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> foo = obj.name</span><br />
<span style="font-family: Courier New, Courier, monospace;"> puts obj.date</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.calculation</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">- Interrogative methods get phrased as questions:</span><br />
<span style="font-family: Courier New, Courier, monospace;">obj.date_today?</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.name?</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.calculation_done?</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">- methods that modify the object (or caller) itself, should be</span><br />
<span style="font-size: x-large;">exclamations:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.truncate!</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.remove_name!</span><br />
<span style="font-family: Courier New, Courier, monospace;"> obj.date! "Julian" # I wish I could do obj.date "Julian"!, instead.</span><br />
<span style="font-size: x-large;"></span><br />
<span style="font-size: x-large;">Ah, well.</span><br />
Fuente: <span style="font-family: Verdana, sans-serif;"><a href="https://www.ruby-forum.com/topic/898325">https://www.ruby-forum.com/topic/898325</a></span><br />
<br />
<span style="font-size: x-large;">No hay mucha información acerca de esto, pero esimportantisimo... Hay solo que ver este artículo:</span><br />
<a href="http://www.itworld.com/article/2833265/cloud-computing/don-t-go-into-programming-if-you-don-t-have-a-good-thesaurus.html"><span style="font-family: Verdana, sans-serif;">http://www.itworld.com/article/2833265/cloud-computing/don-t-go-into-programming-if-you-don-t-have-a-good-thesaurus.html</span></a><br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-12242911359783071892015-11-03T08:54:00.009-08:002015-11-03T09:01:30.771-08:00Mi primer rspec en Rails<span style="font-size: x-large;">Bueno, ¡Ya va siendo hora de hacer tests! Por que, nos aseguramos de que nuestro codigo funciona en cada nuevo cambio que hacemos o incluso antes de hacerlo. hay varios tipos de tests en rails, el que esta por defecto es el unity test, pero Rspec es el más famoso por se fácil de interpretar y de entender, aunque, eso si, un poco largo, Es una muy buena practica y podeis empezar <a href="https://www.youtube.com/watch?v=gsgG-JvXsJ0&feature=iv&src_vid=UhInuf1ar7Q&annotation_id=annotation_2414484661&spfreload=1">con este tutorial</a>, a hacer test driven developmnent!</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Empezamos, con los más básico, vamos a isntalar el Gem o libreria dentro de nuestor proyecto.</span><br />
<span style="font-size: x-large;">en mi caso, uso rails 3.2.13 el rspec compatible, teneis que buscar cual es la compatibilidad en vuestro caso, ya sea en <a href="https://rubygems.org/">Rubygems</a> es</span><span style="font-family: "courier new" , "courier" , monospace;"> gem 'rspec-rails', '~> 3.2', '>= 3.2.1'</span><br />
<span style="font-size: x-large;">Otra cosa a tomar en cuenta es si necesitamos require 'spec_helper' o 'rails_helper' en el archivo spec.</span><br />
<span style="font-size: x-large;">Si falla algo lo mejor es ir buscando ell error en algun buscador, pero creo que no os he dicho nada nuevo ^^.</span><br />
<span style="font-size: x-large;">ejecuto para actualizar la libreria o gems:</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">bundle</span><br />
<br />
<span style="font-size: x-large;">Si la acualización de los gems fue bien, ahora genero con rails los archivos para empezar a utilizar rspec.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">rails generate rspec:install</span><br />
<br />
<span style="font-size: x-large;">Si creamos un modeo nuevo con rails generate model, nos generará unos archivos para poder hacer los tests y migrará los test también, si ya lo tenemos generado, tendremos que migrar los test (que es es este caso) nosotros mismos así:</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">bundle exec rake db:test:prepare</span><br />
<br />
<span style="font-size: x-large;">Usando el modelo hecho en el anterior post crearemos un archivo dentro de</span><span style="font-family: "courier new" , "courier" , monospace;"> rspec/model/</span><br />
<br />
<span style="font-size: x-large;">un archivo con el nombre:</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">setup_rspec.rb</span><br />
<br />
<span style="font-size: x-large;">Y de contenido:</span><br />
<span style="font-size: xx-small;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">require "rails_helper"</span><br />
<span style="font-size: large;"><span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">RSpec.describe Setup, type: :model do</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> before(:all)do</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> @setup = Setup.new(title:"My Body")</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> @sb4_setup = Sb4_Setup.new(san_type:"123456")</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> end</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> it "should have a matching title" do</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> expect(@setup.title).to eq("My Body")</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> end</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> it "should have a matching san_type" do</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> expect(@sb4_setup.san_type).to eq("123456")</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"> end</span><br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;">end</span><br />
<div>
<br /></div>
<div>
<span style="font-size: x-large;">Ahora trata primero o escribelo y a ver si falla. Es bueno que falle. Así nos entrenaremos a hacer primero los tests y luego el codigo.</span></div>
<div>
<span style="font-size: x-large;">Y bueno, esa seria la primera versión, pero nos faltaria hacer tests de validators y de controllers.</span></div>
<div>
<span style="font-size: x-large;">Eso sera en el siguiente post :)</span></div>
<div>
<br /></div>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-71353341696169712015-10-27T06:28:00.007-07:002015-11-03T03:23:20.163-08:00Crear un projecto test para ver como funcionan las herencias dentro de un modelo (inheritance) <span style="font-size: x-large;">Voy a crear un proyecto de cero para ver como y si funcionan las herencias dentro de las classes de un determinado modelo.</span><br />
<span style="font-size: x-large;"><br />
Asi que:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">rails new single_t_inheritance_rails_test</span><br />
<br />
<span style="font-size: x-large;">ahora genero un modelo con scaffold generators:</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">rails generate model Setup setup_installations:string type:string</span><br />
<div>
<span style="font-size: x-large;">Es la forma más fácil de crear un proyecto.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Ahora migramos la base de datos:</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">bundle exec rake db:migrate</span><br />
<span style="font-size: x-large;"><br /></span><span style="font-size: x-large;">Vamos a usar herencias dentro del modelo, </span><a href="http://eewang.github.io/blog/2013/03/12/how-and-when-to-use-single-table-inheritance-in-rails/" style="font-size: xx-large;">aquí esta la explicación en ingles con otro ejemplo</a></div>
<br />
<br />
<span style="font-size: x-large;">Ahora queremos migrar de un supuesto producto 1 en nombre del cliente. que seria, Customer, por ejemplo.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">rails generate migration AddCustomerToProduct1Setup</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Y vamos a:</span><br />
<span style="font-family: Courier New, Courier, monospace;">db/migrations/add_customer...setup.rb</span><br />
<span style="font-size: x-large;">cambiamos.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">def change </span><br />
<span style="font-family: Courier New, Courier, monospace;"> add_column :setups :customer :string </span><br />
<span style="font-family: Courier New, Courier, monospace;">end</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">bundle exec rake db:migrate</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">*tambien podemos hacer </span><span style="font-family: Courier New, Courier, monospace;">bundle exec rake:rollback </span><span style="font-size: x-large;">y poner el nuevo atributo dentro de la primera migración, lo hago así para que saber como hacer en caso de que queramos agregar más atributos.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-size: x-large;">Una vez tenemos migrados los datos tenemos que crear las classes heredadas(Inherit classes).</span><br />
<span style="font-size: x-large;">En este caso.</span><br />
<span style="font-size: x-large;"><br /></span>
<span style="font-family: 'courier new', courier, monospace;">single_t_inheritance_rails_test/app/models/product_1.rb</span><br />
<span style="font-family: 'courier new', courier, monospace;"><br /></span>
<span style="font-size: x-large;">Y adentro</span><br />
<br class="Apple-interchange-newline" /><span style="font-family: 'courier new', courier, monospace;">class Product_1 < Setup</span><br />
<span style="font-family: 'courier new', courier, monospace;"> attribute_accessor :customer</span><br />
<span style="font-family: 'courier new', courier, monospace;">end</span><br />
<span style="font-size: x-large;">Y Ahora podemos probar si funciona en la consola dentro de la terminal y nuestro proyecto:</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">rails console</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Setup.create(setup_installations:"instalation 4")</span><br />
<span style="font-size: x-large;">Funciona.</span><br />
<span style="font-family: Courier New, Courier, monospace;">Setup.create(customer:"New Customer 1")</span><br />
<span style="font-family: Courier New, Courier, monospace;">protected attribute....</span><br />
<span style="font-size: x-large;">No tendria que funcionar</span><br />
<span style="font-size: x-large;">Es correcto! No podemos guardarlo por que solo podemos acceder si creamos una nueva clase.</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Setup.create(customer:"New Customer 1")</span><br />
<span style="font-family: inherit; font-size: x-large;">Funciona!</span><br />
<br />
<span style="font-family: inherit; font-size: x-large;">Ahora ya sabes como crear herencias :). Ahun así ten en cuenta los pros y contras de estas.</span><br />
<br />
<br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-3796095592952189102015-10-08T09:10:00.002-07:002015-10-08T09:13:29.685-07:00Como fusionar o hacer "merge" en Git si tengo muchos cambios en diferentes ramas. Mi opción favorita<div>
<span style="font-size: x-large;">Este es un problema común si por alguna razón te enfermaste o hiciste muchos cambios en diferentes ramas con diferentes commits y evitar tener conflictos antes de intentar subir tus cambios a master.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<span style="font-size: x-large;">Imaginemos que tengo La rama A, B y Master</span><br />
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Nuestro master esta actualizado (already updated)</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">En A tengo los commits: A5,A4,A3,A2,A1 adelante de master(ahead master)</span></div>
<div>
<span style="font-size: x-large;">En B tengo los commits: B2, B1 adelante de master(ahead master)</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">A es mucho más grande pero eso nos da igual. Lo primero que tenemos que tener claro es que las 2 ramas ya han sido revisadas y aprobadas por nosotros a algún otro compañero y están preparadas para enviar(ready to ship).</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Pasos.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">1. Hacer rebase en una de las ramas</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git checkout A</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">usamos rebase y por ejemplo usamos "squash", <a href="https://git-scm.com/book/es/v1/Ramificaciones-en-Git-Reorganizando-el-trabajo-realizado">aqui puedes ver la documentación</a>:</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git rebase -i HEAD~5</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">m A5 </span><span style="font-family: inherit; font-size: x-large;">"el primero"</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">squash A4</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">s AX</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">s ""</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">...</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">realizar los cambios en nuestor editor de texto y guardarlo para convertir todo un solo commit.</span></div>
<div>
<span style="font-size: x-large;">Este commit lo puedo usar ahora en otra rama.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">2. Hacer rebase en la otra rama.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git checkout B</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">ahora hago el mismo procedimiento que arriba, la diferencia es que ahora solo son 2 commits.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Esto lo hago por que una vez que pase un commit a la rama que hare merge en master no podre cambiar los commits anterirores al comit que copiare de una de las ramas y lo pasare a la que quiero enviar el codigo a master. Así quedará todo más limpio</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">3. Elegir cual de las 2 hare merge.</span></div>
<div>
<span style="font-size: x-large;">Aconsejo usar la rama más importante de las 2. En caso de que las 2 sean imporantes también puedes crear una nueva rama prepararla explicarlo todos los cambios de las otras 2 . Para evitar malentendidos con los comapañeros lo mejor es poner los 2 links en comentarios en las 3 y cerrar las otras 2 dejando solo la nueva. </span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">En este caso suponemos que B es solo una serie de bugs(errores) y A es la imporante.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">4. elegír commit (cherry-pick), pasarlo y resolver conflictos.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">git checkout B</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Copiar el los comentarios del commit en si en algún lugar, más adelante lo podras usar.</span></div>
<div>
<span style="font-size: x-large;">Copiar numero de commit, será algo así como "asgfh3658" al lado del commit a la derecha.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">git checkout A</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git cherry-pick #num_del_commit</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Ahora, cruza los dedos a ver si no hay ningun conflicto, sino, no pasa nada, a resolver conflictos :). Borra una de las 2 opciones dejando la otra y borrando las lineas extra.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Una vez resueltos los conflictos:</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">git add .</span></div>
<div>
<span style="font-size: x-large;">git commit -m "aquí pega los comentarios, si todo está en ordén tienes que poner la misma info del commit" </span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">5. Pequeños detalles finales como cambiar info del commit y fecha de publicación.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">cambiar la info del ultimo commit:</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git commit --amend -m "nuevo commit" ó</span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">git commit --amend </span></div>
<div>
<span style="font-size: x-large;">Con este ultimo te lleva a tu editor predeterminado, puedes borrar parte del commit antiguo y dejar el resto.</span></div>
<div>
<span style="font-size: x-large;"><br /></span></div>
<div>
<span style="font-size: x-large;">Listo!</span></div>
<div>
<span style="font-size: x-large;">No fue tan difícil verdad? Quiza es un poco lio, pero creeme, es una de las formas más sencillas de hacerlo.</span></div>
<div>
<br /></div>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-75996198146982921032015-09-11T04:28:00.001-07:002015-09-11T04:37:56.557-07:00Calcular la fecha en x semanas<span style="font-size: x-large;">Ruby es muy practico para pequeños calculos, por ejemplo en este caso:</span><br />
<span style="font-size: x-large;">Quiero saber que fecha sera en 7 semanas a partir del 4 de Septiembre.</span><br />
<span style="font-size: x-large;">Paso la fecha que quiero calcular usando la clase Date, y parse en formato normal de fecha.</span><br />
<span style="font-size: x-large;">Luego agrego los días que quiero de más. Por ejemplo como quiero calcular la fecha en 7 semanas puedo poner 7*7 o directamente 49 días.</span><br />
<span style="font-size: x-large;">Una vez calculado, me dara el resultado en Date. Pero me parece más comodo de ver en string,así que lo convierto en string con "to_s". Y voila!</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">(Date.parse('4/9/2015') + 7*7).to_s</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">ó</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">(Date.parse('4/9/2015') + 49).class (Date.parse('4/9/2015') + 7*7).to_s</span><br />
<span style="font-family: Courier New, Courier, monospace;">=> "2015-10-23"</span><br />
<div>
<span style="font-size: x-large;">Así que ya se que sobre que día tengo que ir al doctor cuando me dijo, "en siete semanas concierta una cita" :)</span></div>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-17354965580350791492014-03-13T02:15:00.001-07:002014-03-13T04:27:28.535-07:00 La filosofía del Ruby* como lenguaje de programación. Segunda parte.<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">¿Que son los Items?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Esta pregunta es imporante interesante y muy filosofica.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">¿Quieres probar? Pon cualquier palabra, numero etc... por ejemplo dentro de irb en la consola y probad lo siguiente.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">irb</span><br />
> <span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">String.superclass</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">=>Object</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">>Numeric.superclass</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">=>Object</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Por último e importante para un ejemplo de abajo. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Class.superclass</span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">=>Module</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Module.superclass</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">=>Object</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Aquí hay un dibujo muy artístico</span><br />
<a href="http://i.stack.imgur.com/XDHjA.jpg">http://i.stack.imgur.com/XDHjA.jpg</a><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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 <b>.class</b> <b>siempre tienen la primera letra en mayúscula</b>.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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).</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ejemplos faciles y rapidos de Steve:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Así que si te ha quedado claro que es una instancia ¿Como la escribirias en una sola frase?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Trata de hacerlo y una vez lo hayas hecho mira se parece a esta definición.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">¿Cual de estos ejemplos seria una instancia y cual no?</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">1. x = Box</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">2. x = box</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">3. x = ''Box"</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">4. x = 123</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">5. x = a</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">6. x= Box.new</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">1. Box será un archivo .class ya que está en mayusculas, no será una instancia.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">2. box es una instancia</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">3. "Box" aunque esté en mayusculas es una instancia ya que está dentro de unas dobles comillas (string).</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">4. 123 es una isntancia dentro de class Fixnum </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">5. Tambíen a es una Instancia, ya que está en minuculas</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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 .</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Consejos hacer los ejercicios relacinados con esto desde este link;</span><br />
<a href="http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm" style="background-color: white; color: #4d469c; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 19px; font-style: italic; line-height: 26.600000381469727px; text-decoration: none;">http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm</a><br />
<br />
<br />
<br />
<br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-5801194103590493912014-03-10T06:39:00.004-07:002014-03-13T01:42:16.971-07:00 La filosofía del Ruby* como lenguaje de programación. Primera parte.<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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,</span><br />
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ruby tiene:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> - Una sola herencia ( no se repite)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- method overriding (tienes la posibilidad de estar sobrecargando una función que no se encuentra definida en el padre del que heredas)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- namespaces (</span><span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px;">Un espacio de nombres es un contenedor abstracto en el que un grupo de uno o más identificadores únicos pueden existir.)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- class(estaticos) variables y metodos,</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- patterns como los singletons (</span><span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px;"> (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una </span><a class="mw-redirect" href="http://es.wikipedia.org/wiki/Clase_(programaci%C3%B3n_orientada_a_objetos)" style="background-color: white; background-image: none; color: #0b0080; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; text-decoration: none;" title="Clase (programación orientada a objetos)">clase</a><span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px;"> o el valor de un tipo a un único </span><a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" style="background-color: white; background-image: none; color: #0b0080; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px; text-decoration: none;" title="Programación orientada a objetos">objeto</a><span style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.200000762939453px;">.</span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- duck typing (enfocado a objetos)</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">!</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ruby NO tiene:</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">!</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">-Interfaces (ya que es flexible de tipos), pero mixins permiten secciones estándar de código para ser </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">incluido y reutilizados en clases. Se permiten múltiples mixins. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- Método de la sobrecarga (pero los métodos pueden tener argumentos opcionales).</span></div>
<div>
<br /></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Hay que diferenciar enre Arrays, ordered list of elements </span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">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... : </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ejemplo:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Comida = ["huevos", 21, :champiñones]</span><br />
<i> <span style="font-family: inherit;"> nombre del = Ashes["strings", 1nteger, symbol]</span></i><br />
<i><span style="font-family: inherit;"> main object </span> </i> <br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">def</span><br />
<i><span style="font-family: inherit;"> defincición o metodo</span></i><br />
<div>
<br /></div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">end</span><br />
<i><span style="font-family: inherit;">cierre del/ de_los comando/s</span></i><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">class</span><br />
<span style="font-family: inherit;"><i>clase o tipo (endtro de la clase escribiremos los atributos) **</i></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">object.new </span><br />
<i>objeto.constructor (new), es decir, cada vez que veamos (.new) es un constructor.</i><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">end</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">if</span><br />
<span style="font-family: inherit;"><i> acción o metodo en caso de.. </i></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">end</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">if else</span><br />
<i><span style="font-family: inherit;">cualquier metodo diferente a los definidos</span></i><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">end</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Arrays<span style="color: orange;"> <span style="background-color: black;">[abc, def]</span></span></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">Ashes</span><span style="color: orange; font-family: 'Courier New', Courier, monospace;"> <span style="background-color: black;"><b>[] &/or {}</b></span></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">Items(ex.ej</span><span style="font-family: 'Courier New', Courier, monospace;">emplo de 2 items) </span><span style="color: orange; font-family: 'Courier New', Courier, monospace;"><span style="background-color: black;">abc, def</span></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Strings <span style="background-color: black; color: orange;"><b>"</b>abc<b>"</b></span></span></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">Symbol (unmutable string)<span style="background-color: black; color: orange;"><b>:</b>abc</span></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">Block <span style="color: orange;"><span style="background-color: black;"><b>||</b></span></span></span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">integers </span><span style="background-color: black; color: orange; font-family: 'Courier New', Courier, monospace;">1 2 3</span></div>
<div>
<span style="font-family: 'Courier New', Courier, monospace;">float </span><span style="background-color: black; color: orange; font-family: 'Courier New', Courier, monospace;">0.001 3.1416 ...</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">object </span><span style="background-color: black; color: orange; font-family: 'Courier New', Courier, monospace;">.abc</span><br />
<br /></div>
<div>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Otras notaciones.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Dentro de un objeto ... clave<span style="background-color: black;"><span style="color: orange;">=></span></span>valor</span><br />
<br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="color: #222222; font-size: 13px;">"Un </span><strong style="color: #222222; font-size: 13px;">objeto</strong><span style="color: #222222; font-size: 13px;"> 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 </span><strong style="color: #222222; font-size: 13px;">atributos</strong><span style="color: #222222; font-size: 13px;">. Y también un conjunto de funciones que crean un interfaz para interactuar con el objeto: son los </span><strong style="color: #222222; font-size: 13px;">métodos</strong><span style="color: #222222; font-size: 13px;">."</span></span><br />
<span style="font-family: inherit;"><i>Fuente: <a href="http://rubytutorial.wikidot.com/clases-objetos">http://rubytutorial.wikidot.com/clases-objetos</a></i></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Block sirve para Iterar(Iterating) repetir un comandos en diferentes items.</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Los Items pueden ser:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- Objetos, :huevos, :24</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- Strings "queso", "24"</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">- Integers "34, 27" </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Los Items si son una lista vienen dentro de ashes,pero si es un solo item a veces no hace falta.<br />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 <a href="http://ruby-doc.org/core-2.1.0/String.html">lista de Strings!</a> muchas veces se puede utilizar la misma notación para añadir intgerers to_i o strings to_s...</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">**: acerca de class escribiré y traduciré el documento, pero por ahora podeis ver el contenido en ingles aquí: <br /><a href="http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm">http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm</a></span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> La guía es una maravilla!</span></div>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-2036444745801003622014-02-16T17:37:00.000-08:002014-03-10T06:47:53.359-07:00Listo para centrarse y empezar a tiempo completo! <span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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 :).</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">!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! </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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!</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Auí está: <a href="http://tryruby.org/">http://tryruby.org</a></span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Gracias a code school :).</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">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. </span><br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-84173783130880111442014-01-13T11:23:00.001-08:002014-01-13T11:37:15.720-08:00Posible fallo al instalar RVM "Failed to fetch http://ppa.launchpad.net/ 404 Not Found"<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">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.</span></i><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Por fin esta solucionado! Se lo debo en parte a una amiga, Bea me ayudo bastante con todo.</span></i><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">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.</span></i><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Hay que remover estos errores de paquetes y/o links rotos que ya no existen...</span></i><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></i>
<b><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Paso 1.</span></i></b><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Abrir la terminal y escribir:</span></i><br />
<span style="background-color: #cccccc;"><span style="font-family: "Courier New",Courier,monospace;">sudo apt-get update </span></span><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Actualizara todos los paquetes a la ultima versión y entonces nos saldra el paquete que no existe.</span></i><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>Puedes ver que no existe coipando la url o dirección</i> </span><span style="font-family: "Courier New",Courier,monospace;"><span style="background-color: black;"><span style="color: white;"><ctrl-alt-c></span></span></span> <span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>y pegandola en tu navegador...veras que no encuentra la pagina.</i></span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>Fijate bien en el nombre del archivo que falla.</i></span><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i><br /></i></span>
<b><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>Paso 2.</i></span></b><br />
<span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><i>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".</i></span><br />
<span style="font-size: large;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></span>
<br />
<span style="background-color: #f3f3f3;"><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><span style="font-family: "Courier New",Courier,monospace;">gedit /etc/apt/sources.list
</span></span></span><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><span style="font-size: small;"></span></span></i><br />
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Al buscarlo <span style="background-color: black;"><span style="color: white;"><ctrl-alt-f></span></span><span style="background-color: black;"><span style="color: white;"><span style="color: black;"><span style="background-color: white;"> y escribiendo </span></span>"</span></span><span style="background-color: black;"><span style="color: white;">wingpanel"</span></span> no encuentro nada.</span></i><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Si lo encontraras tendrias que borrarl las lineas y guardar cambios. Fijate bien que estas borrando lo correcto.</span></i></span><br />
<span style="font-size: large;">
<i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><b>Paso 3.</b></span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">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.</span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Quita las palimitas habilitadas "V" te pedira la contraseña de "root" o de usuario raiz ponla y listo...</span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></i></span>
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><b>Paso 4.</b></span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Cierra tu terminal y vuelve a abrir una nueva.</span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">vuelve a poner <span style="background-color: #cccccc;">sudo apt-get update</span> y sorpresa! </span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">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.</span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><br /></span></i></span>
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Para instalar RVM os recomiendo esta guía:</span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;"><a href="http://ruby.about.com/od/rubyversionmanager/ss/installrvmlinux.htm">http://ruby.about.com/od/rubyversionmanager/ss/installrvmlinux.htm</a></span></i></span><br />
<span style="font-size: large;"><i><span style="font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;">Buena suerte y cualquier duda y/o comentario no dudes en escribirme.</span></i></span><br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-83541397870920753282014-01-02T17:04:00.001-08:002014-01-29T05:16:14.961-08:00Lección 0. Comandos básicos en terminal y una buena guía para Ruby<span style="font-family: Georgia, Times New Roman, serif;">Como me recomendo mi amiga Anita que empezó a programar practicamente desde cero, usad <a href="http://ruby.learncodethehardway.org/" target="_blank">"Ruby on the hard way"</a>. 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€<a href="http://www.amazon.de/Learn-Ruby-Hard-Way-Shaws/dp/032188499X/ref=sr_1_1?ie=UTF8&qid=1388939803&sr=8-1&keywords=Learn+Ruby+the+Hard+Way" target="_blank"> tambien podeis comprar el libro</a>...</span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;">Aquí dejo algunos comandos básicos de la Terminal que tendreis que aprender como yo lo estoy haciendo.</span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;">Abrís terminal: </span><span style="background-color: black; color: white; font-family: Courier New, Courier, monospace;">ctrl+alt+T</span><span style="background-color: white; font-family: Georgia, 'Times New Roman', serif;"><-teclear*</span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;"><br /></span></span><br />
<span style="background-color: white; font-family: Georgia, 'Times New Roman', serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;"><b>Comandos en Terminal:</b></span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br /></span>
<span style="font-family: Georgia, Times New Roman, serif;">1.- run"cargar" irb (Interactive Ruby): </span><span style="background-color: #444444; color: white; font-family: Courier New, Courier, monospace;">irb</span><br />
<span style="font-family: Georgia, Times New Roman, serif;">2.- Salir del irb o de cualquier aplicación que has cargado en la terminal: </span><span style="background-color: black; color: white; font-family: 'Courier New', Courier, monospace;">ctrl+d</span><span style="background-color: white;"><span style="font-family: Georgia, Times New Roman, serif;"> <-teclear*</span></span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br />3.- Para ver las carpetas que tienes:</span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">ls</span></span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br />4.- Ver todas las carpetas(incluso las escondidas): </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">ls -a</span></span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br />5.- Para entrar a una carpeta "change directory": </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">cd nombre_de_carpeta</span></span><span style="font-family: Georgia, 'Times New Roman', serif;">*</span><br />
<span style="font-family: Georgia, Times New Roman, serif;">*Si entras en una carpeta directamente desde tu directorio inicial aparecera <span style="background-color: #444444;"><span style="color: white;"> ~ </span></span></span><span style="font-family: Georgia, 'Times New Roman', serif;"> significa que es el directorio de inicio ().</span><span style="font-family: Georgia, Times New Roman, serif;"><br /><br />6.- Crear carpeta y archivos:<br />6.1.- Crear una carpeta:</span><br />
<span style="background-color: #444444; color: white; font-family: 'Courier New', Courier, monospace;">mkdir </span><span style="background-color: #444444; color: white; font-family: 'Courier New', Courier, monospace;">nombre_que_quieras</span><br />
<span style="font-family: Georgia, Times New Roman, serif;">6.2.- Crear un archivo:</span><span style="background-color: #444444; color: white; font-family: 'Courier New', Courier, monospace;">touch </span><span style="background-color: #444444; color: white; font-family: 'Courier New', Courier, monospace;">nombre_que_quieras.ext</span><span style="font-family: Georgia, Times New Roman, serif;"><br />7.- Volver a la carpeta anterior: </span> <span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">cd /</span></span><br />
<span style="font-family: 'Times New Roman';"><br />8.- Borrar toda la informacion anterior en la terminal "solo visualmente": </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">clear</span></span><br />
<span style="font-family: 'Times New Roman';"><br />9.- Copiar un archivo: </span><span style="background-color: #444444; font-family: 'Times New Roman';"><span style="color: white; font-family: Courier New, Courier, monospace;">cp archivo_original_y_extension archivo_nuevo.ext</span></span><br />
<span style="font-family: 'Times New Roman';"><br />10.- Mover archivo y/o cambiar nombre del archivo (move):<br /> </span><span style="background-color: #444444; font-family: 'Times New Roman';"><span style="color: white; font-family: Courier New, Courier, monospace;">mv archivo.extension carpeta_deseada/nombre_nuevo.ext</span></span><br />
<span style="font-family: 'Times New Roman';"><br />11- Ver un archivo de texto:</span><span style="font-family: 'Times New Roman';"><br />11.1.-Corto (concatenate): </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">cat archivo.extension</span></span><br />
<span style="font-family: 'Times New Roman';"><br />11.2.-Largo: </span><span style="font-family: 'Courier New', Courier, monospace;"><span style="background-color: #444444; color: white;">less </span><span style="background-color: #444444; color: white;">archivo.extension</span><span style="background-color: white;">*</span></span><br />
<span style="background-color: white;"><span style="font-family: Georgia, Times New Roman, serif;">*Para bajar y buscar en el 11.2.(archivo extenso): </span></span><span style="background-color: #444444; color: white; font-family: 'Courier New', Courier, monospace;"> / texto_a_buscar</span><span style="color: white; font-family: 'Courier New', Courier, monospace;"><span style="background-color: black;">INTRO.</span></span><br />
<span style="background-color: white; font-family: Georgia, 'Times New Roman', serif;"> Para salir apretar: </span><span style="background-color: black; color: white; font-family: 'Courier New', Courier, monospace;">q</span><br />
<span style="background-color: black; color: white; font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Times New Roman';">12.-Para ver la dirección completa de tu ubicación en las carpetas (Print working directory): </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">pwd</span></span><br />
<br />
<span style="font-family: 'Times New Roman';">13.- Borrar archivo (remove): </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;">rm nombre_del_archivo.ext </span></span><br />
<span style="background-color: black; color: white; font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: 'Times New Roman';">14.- Entrar a una carpet con espacio entre palabras : </span><span style="background-color: #444444;"><span style="color: white; font-family: Courier New, Courier, monospace;"> cd nombre \segundapartenombre </span></span><br />
<pre class="prettyprint prettyprinted"></pre>
<span style="font-family: Georgia, Times New Roman, serif;">*es decir espacio barra inversa continuación del nombre.</span><br />
<span style="font-family: Georgia, Times New Roman, serif;"><br />Al final pondre ejemplos de cada uno de estos casos para que sea más claro.</span><br />
<br />Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-54229381924870954622013-11-17T07:41:00.001-08:002014-01-01T04:14:40.385-08:00Día 3? Cambiando SO Linux y reinstalando todo...<span style="font-family: Times, Times New Roman, serif;">Las cosas no han ido como esperaba y por en medio he estado ocupado con otras historias, al final decidí cambiar Ubuntu 13 por <a href="http://elementaryos.org/" target="_blank">Elementary OS</a>, sistema operativo que me gusta mucho más, me va mucho más rápido y es bastante más pragmático, problemas...Es demasiado nuevo en los foros no se habla mucho de el y tengo problemas por que la "Terminal" usa Pantheon y hay códigos que no me sirven como en el Ubuntu, ahora mismo tengo un problema con eliminar un programa que tengo instalado varias veces y no me encuentra "sources.list"...Sigo en ello... Lo del Spyware de Ubuntu me parece algo muy triste y simplemente repugnante. <a href="http://www.gnu.org/philosophy/ubuntu-spyware.es.html" target="_blank">Aquí podéis ver un articulo acerca de esto</a>.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-BBRUOpq8SDE/UojjNca6CQI/AAAAAAAAA6o/b4gileeJQIw/s1600/600px-Elementary_logo.svg_.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: Times, Times New Roman, serif;"><img border="0" height="320" src="http://3.bp.blogspot.com/-BBRUOpq8SDE/UojjNca6CQI/AAAAAAAAA6o/b4gileeJQIw/s320/600px-Elementary_logo.svg_.png" width="320" /></span></a></div>
<span style="font-family: Times, Times New Roman, serif;">Así que bastante contento con Luna Elementary OS, y solo peleándome con la terminal. Tengo que instalar todavía Ruby y Ruby on Rails, ya iré contando como va.<br /><br />Ok! <a href="http://ubuntuforums.org/showthread.php?t=994305" target="_blank">Problema de "Sources.list" en Terminal Pantheon resuelto!</a></span><br />
<br />
<span style="background-color: #666666; color: white; font-family: Courier New, Courier, monospace;">sudo nano -Bw /etc/apt/sources.list</span><br />
<span style="font-family: Times, Times New Roman, serif;"><br /></span>
<span style="font-family: Times, Times New Roman, serif;">Por alguna extraña razón que desconozco Pantheon* Terminal no viene por defecto con el command directo y hay que utilizar Nano, ahora a ver si puedo arreglar los pequeños errores...</span><br />
<br />
-----------------<br />
<span style="font-family: inherit;"><b>*Vale si muy bien, no entiendo que es...</b></span><br />
<a href="http://es.wikipedia.org/wiki/Elementary_OS" target="_blank"><span style="font-family: inherit;"><b>Wiki info de Elementary OS.</b></span></a><br />
<a href="https://wiki.archlinux.org/index.php/Pantheon" target="_blank"><span style="font-family: inherit;"><b>Pantheon*(En ingles!)</b></span></a><br />
<span style="font-family: inherit;"><b>Ok, interesante! <a href="http://ext4.wordpress.com/2011/02/24/pantheon-el-proyecto-elementary-competira-contra-unity-de-ubuntu-y-shell-de-gnome/" target="_blank">Quiero noticias más frikis acerca de el Pantheon</a></b></span><br />
<a href="http://sliceoflinux.wordpress.com/2010/02/26/nano-sencillo-editor-de-textos-para-el-terminal/" target="_blank"><span style="font-family: inherit;"><b>Nano</b></span></a>Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-22422304063720445792013-11-06T19:24:00.000-08:002013-11-07T06:57:38.305-08:00Día 0, Ubuntu "Linux" e instalar Ruby<span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;">Despues de semanas de retraso aqui estoy por fin con mi <span style="background-color: purple;"><span style="color: white;">Ubuntu</span></span> configurado y listo para empezar a instalar <span style="background-color: #990000;"><span style="color: white;">Ruby</span></span>. Primero que nada me recomendaron utilizar Linux, me decante por ubuntu por su facilidad y por que ya me es más familiar.Vamos al grano.</span><span style="font-family: Times, Times New Roman, serif;"><br />Lo primero es:</span></span><span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br /><br />Saber que es <a href="http://es.wikipedia.org/wiki/Ruby" target="_blank">Ruby</a>, y más tarde<a href="http://es.wikipedia.org/wiki/Ruby_on_rails" target="_blank"> Ruby on rails</a>. Si te he convencido, manos a la oba, sino pondre pronto unos links de el por que de elegir este lenguaje.</span></span><span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br />1. <span style="background-color: #999999;"><span style="color: white;">Teclas </span></span></span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="background-color: white;">"</span><span style="background-color: #999999; color: white;">ctl+alt+t</span><span style="background-color: white;">"</span></span><span style="font-family: Times, Times New Roman, serif;"><span style="background-color: white;"> </span>(para ir a la terminal) ,una vez allí </span><span style="font-family: Times, Times New Roman, serif;">insertar:</span><code><br /><br /><span style="background-color: purple; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">sudo apt-get install git</span></code><span style="background-color: purple; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> <code>apt-get install git</code> </span></span><span style="font-weight: normal;"><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span><br /><span style="font-family: Times, Times New Roman, serif;">Y seguir las indicaciones aquí: </span><a href="https://www.ruby-lang.org/es/downloads/" style="font-family: Times, 'Times New Roman', serif;" target="_blank">https://www.ruby-lang.org/es/downloads/</a> </span><span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;">Pero basicamente es escribir en la terminal:</span><br /><br /><span style="background-color: purple; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">\curl -L https://get.rvm.io | bash -s stable</span><span style="font-family: Times, Times New Roman, serif;"><br /><br />Seguramente no tendras instalado curl.</span><span style="font-family: Times, Times New Roman, serif;">Te pone que lo isntales... No pongo nada mas para que lo vayais intentando. <br /><br />Si no teneis tiempo...Ok aqui esta:</span><br /><span style="background-color: purple; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">sudo apt-get install curl</span></span><span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br /><br />Aqui esta la pagina oficial de rvm: <a href="https://rvm.io/" target="_blank">https://rvm.io/</a> </span><span style="font-family: Times, Times New Roman, serif;">Que no sabes que es? no entraste al link de antes verdad? :) </span><span style="font-family: Times, Times New Roman, serif;">Esto tomara un rato... Así que paciencia.</span></span><span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br />Una vez que haya acabado.Por fin! Ahora si. Podremos instalar Ruby.</span><code class="sh"><br /><span style="background-color: purple; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">sudo apt-get install ruby irb rdo</span></code></span><br />
<span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif; margin-left: 1em; margin-right: 1em;"><br /><a href="http://4.bp.blogspot.com/-j5ia9-DakS8/UnhhnOS3czI/AAAAAAAAAzI/JYo4Zhz39_U/s1600/ruby_badge.sh-600x600.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-j5ia9-DakS8/UnhhnOS3czI/AAAAAAAAAzI/JYo4Zhz39_U/s320/ruby_badge.sh-600x600.png" width="320" /></a></span></span><br />
<span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br />O</span></span><span style="font-family: Times, 'Times New Roman', serif;">tras teclas y funciones interesantes para Ubuntu:</span><br />
<span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;"><br />Para pegar en la terminal: </span><span style="background-color: #666666; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Shift + Ctrl+ v</span></span><br />
<span style="font-weight: normal;"><span style="font-family: Times, Times New Roman, serif;">Ir a escritorio ubuntu: </span><span style="background-color: #999999; color: white; font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ctrl + Super(tecla Win) + d </span></span><br />
<div>
<span style="font-family: "Trebuchet MS",sans-serif;"><br /></span></div>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0tag:blogger.com,1999:blog-4752252490743297329.post-56153562032243291852013-11-04T19:23:00.000-08:002013-11-07T04:25:30.486-08:00Intro, Y de nuevo a empezar<div style="text-align: center;">
<br />
<a href="http://4.bp.blogspot.com/-jtcyT5bZkHU/UnhY_utL1DI/AAAAAAAAAy0/Me4ScbnzqzY/s1600/berlinspree.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: inherit; font-size: x-large;"><img border="0" height="211" src="http://4.bp.blogspot.com/-jtcyT5bZkHU/UnhY_utL1DI/AAAAAAAAAy0/Me4ScbnzqzY/s320/berlinspree.jpg" width="320" /></span></a></div>
<h3>
<span style="font-family: inherit;"><br /></span><span style="font-family: inherit; font-weight: normal;">
Un día te levantas y te das cuenta de que tienes que volver a empezar, ese dia llego muchas veces estos meses pero el lugar donde trabajaba y mi curso de alemán tuvieron que..Peor que no decirlo... Tuve que perder las unicas cosas que decia a nivel profesional "vale la pena" pare darme cuenta que no. Por lo menos no ahora en relación a mi curso de alemán. Estos dias me he preparado arreglando primero la burocracia alemana (sigue en proceso), mis bicicletas (siguen todavía en proceso) y muchas cosas más. Pero me estoy focalizando en una cosa. PROGRAMAR.Y asi nacio esta idea de escribir aqui. </span></h3>
Tonio Sernahttp://www.blogger.com/profile/06155104956267871375noreply@blogger.com0