tag:blogger.com,1999:blog-4183425196669015472024-03-12T23:10:16.412-03:00Sobre programación y otras yerbasmi blog sobre programación e informática...Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.comBlogger43125tag:blogger.com,1999:blog-418342519666901547.post-10340316004093468232011-05-18T10:16:00.000-03:002013-08-04T22:35:53.820-03:00Discurso final de Al Pacino - Perfume de mujerHay un montón de pasajes de películas que nos quedan grabados. A veces por la popularidad que adquiere (recuerdo la escena de Kate Winslet y Leonardo Dicaprio en la proa del Titanic), a veces por las etapas de la vida en que las vemos y muchas otras porque son discursos o diálogos que tienen un gran contenido. Podría armarse un post con esos pasajes, pero queda para otra vez.<br />
<br />
Hay un discurso, que de chico cuando vi la película me marcó. Por su contenido, por la fuerza que tiene al hablar Al Pacino, por la injusticia que implicaba lo que estaba sucediendo... y porque aún ciego, viejo y mal hablado, frente a un gran público, transmitió y contagió una gran cantidad de valores. Acá va entonces, Al Pacino en Perfume de Mujer...<br />
<br />
<iframe width="560" height="315" src="//www.youtube.com/embed/G_vqzr_g6Ag" frameborder="0" allowfullscreen></iframe>Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-21535967052350307792011-05-01T10:45:00.000-03:002013-08-04T22:45:20.911-03:0011 aplicaciones que no pueden faltar en mi MacMi "equipo" de aplicaciones que hacen más sencilla mi vida en el día a día.<br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/office.jpeg" width="50" height="39" />1. Office 2011</h3><br/>La Suite de Microsoft para Mac. Es prácticamente igual a la que corre en entornos Windows, con las ventajas y desventajas que ello tiene. Cambia la interfaz de usuario ligeramente, pero hace que sea más amigable que las otras versiones.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-20-36.png"><img class="aligncenter" title="Captura Microsoft Office 2011 - Word" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.20.36-300x166.png" width="300" height="166" /></a><br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-20-57.png"><img class="aligncenter" title="Captura Microsoft Office 2011 - Excel" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.20.57-300x167.png" width="300" height="167" /></a><br/><br/>Link: <a title="Office 2011 Mac" href="http://www.microsoft.com/latam/mac">Office 2011 Mac</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/ical.png" width="40" height="39" />2. iCal con Plugin Calendar desde Mac App Store</h3><br/>Un calendario sencillo de usar, rápido, amigable que hace lo que tiene que hacer y nada más. Me organiza la vida, sobre todo si contamos con Iphone que sincronice con él. El plugin Calendar del Mac App Store, hace que se vea en la barra de tareas y se pueda acceder directamente. Para mi, una aplicación sencilla pero imprescindible de usar.<br/><br/>Link: <a title="iCal" href="http://www.apple.com/macosx/what-is-macosx/mail-ical-address-book.html">iCal</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/camtasia.png" width="50" height="39" />3. Camtasia for Mac</h3><br/>Este es para mi el mejor programa para grabar la pantalla y editarlo. Se pueden hacer animaciones, zoom in, zoom out, etc. Es rápido de aprender y bastante intuitivo. Además de que las demos armadas con este programa quedan realmente muy bien.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/3_mac-camtasia-6.jpg"><img class="size-medium wp-image-263" title="Camtasia en Mac" alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/3_mac-camtasia-6.jpg?w=300&h=167" width="300" height="167" /></a> <br/><br/>Link: <a title="Camtasia" href="http://www.techsmith.com/camtasia/">Camtasia</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/navicat.png" width="60" height="20" />4. Navicat for Oracle/MySql/MsSql/Postgre</h3><br/>Son clientes para distintos tipos de motores de base de datos. Son sencillos, estables y gratis desde el Mac App Store. Estaría bueno que hubiera uno (aunque pago) que concentrara todos los tipos de motores. Pero bueno, es gratis y si queremos conectarnos a diferentes motores, tendremos que tener diferentes programas al menos por ahora.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-39-30.png"><img class="size-medium wp-image-264" title="Navicat Postgresql" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.39.30-300x214.png" width="300" height="214" /></a><br/><br/>Link: <a title="Navicat" href="http://www.navicat.com/">Navicat</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/twitter.png" width="40" height="39" />5. Twitter for Mac</h3><br/>Es el mejor cliente de Twitter que conozco. He probado otros, pero indefectiblemente caía en volver a la página web. Este cliente es ameno y sencillo. También los hay para Iphone y para Ipad, por lo que se mantiene el mismo esquema que en los otros dispositivos para leer/escribir en twitter.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-42-37.png"><img class="size-medium wp-image-265" title="Twitter Cliente mac" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.42.37-195x300.png" width="195" height="300" /></a><br/><br/>Link: <a title="Twitter" href="http://www.twitter.com">Twitter</a> ; <a title="Mac AppStore Mac Twitter" href="http://itunes.apple.com/es/app/twitter/id409789998?mt=12">AppStore Mac Twitter</a><br/><h3><img alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Plex.png" width="50" height="20" />6. Plex</h3><br/>Un buen media center, al que se le pueden agregar plugins (ya desarrollados o desarrollar uno nuevo) para poder, por ejemplo, ver video streaming por internet. Tiene todas las ventajas de un Media Center, organiza el multimedia, búsquedas, etc.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-51-15.png"><img class="size-medium wp-image-266" title="Plex Media Center" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.51.15-300x152.png" width="300" height="152" /></a><br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-11-52-58.png"><img class="size-medium wp-image-267" title="Plex Media Center" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-11.52.58-300x187.png" width="300" height="187" /></a><br/><br/>Link: <a href="http://www.plexapp.com/">Plex Media Center</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-12-20-58.png" width="50" height="20" />7. Parallels</h3><br/>Es para mac, el mejor programa de virtualización que conozco. Mejora notoriamente VirtualBox y VMWare. Tiene el modo convencional de virtualización (con una ventana que corra el sistema opererativo huésped) o un modo "coherence" que se integra a la interfaz del sistema operativo host. De esa forma da la sensación de que todos los programa se ejecutan dentro del entorno del host. Es rápido, e imprescindible para los que quieran jugar, ya que va sobre la tarjeta de video física y permite excelentes performances.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/5-windows_folder.jpg"><img class="size-medium wp-image-268" title="Integración de Windows con Mac " alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/5.Windows_folder-300x187.jpg" width="300" height="187" /></a><br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/6-e-win7_aero_crystal.jpg"><img class="size-medium wp-image-269" title="Integración de Windows con Mac II" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/6.e.Win7_aero_crystal-300x187.jpg" width="300" height="187" /></a><br/><br/>Link: <a href="http://www.parallels.com/products/desktop/">Parallels desktop</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/things.png" width="50" height="20" />8. Things</h3><br/>Bajo la filosofía de "Get Things Done", es uno de los mejores gestores de tareas que conozco. Permite regular tareas, trabajos, roles, personas, tiempos, etc. Hay versiones del programa para Ipad y Iphone también.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/thingsmac.png"><img class="size-medium wp-image-274" title="Things for mac" alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/thingsmac.png?w=300&h=218" width="300" height="218" /></a><br/><br/>Link: <a title="Things for mac" href="http://culturedcode.com/things/">Things for Mac</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/transmission.png" width="40" height="39" />9. Transmission</h3><br/>Cliente torrent liviano y sencillo de usar. Sin demasiadas opciones, pero que puede ser una ventaja a la hora de comenzar a usar torrents.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-12-09-44.png"><img class="size-medium wp-image-273" title="Transmission" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-12.09.44-300x106.png" width="300" height="106" /></a><br/><br/>Link: <a title="Transmission For Mac" href="http://www.transmissionbt.com/">Transmission</a><br/><h3><img alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/airvideoserver.png" width="40" height="39" />10. Air Video Server</h3><br/>Es un servidor de video ágil y sencillo de configurar. Simplemente debemos setearle un puerto y una carpeta de donde tomar el contenido multimedia y eso es todo. Abrimos un cliente (otra pc, o simplemente un iPad o iPhone, algo que no está nada mal cuando queremos mirar alguna película acostado :-P), ponemos la ubicación del servidor el puerto y elegimos la película a ver. Para mi, fundamental sobre todo para ver cosas en el Ipad. Permite también conversiones on line de los formatos de video durante la ejecución del contenido mismo.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/air-video.jpg"><img class="size-medium wp-image-271" title="Air Video Iphone Client" alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/air-video.jpg?w=300&h=168" width="300" height="168" /></a><br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/ipad-streaming01small.jpg"><img class="size-medium wp-image-272" title="Air Video Ipad Client" alt="" src="http://bernardorychtenberg.files.wordpress.com/2011/05/ipad-streaming01small.jpg?w=300&h=217" width="300" height="217" /></a><br/><br/>Link: <a title="Air Video Server" href="http://www.inmethod.com/air-video/download.html">Air Video Server</a> ; <a title="Air Video Ipad Client" href="http://itunes.apple.com/us/app/air-video-watch-your-videos/id306550020?mt=8">Air Video Ipad Client</a><br/><h3><img alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/1Password.png" width="50" height="39" />11. 1Password</h3><br/>Administrador de contraseñas pequeño, liviano y fácil de usar. Existen diversas versiones de la aplicación, para iPad y iPhone inclusive. Es una buena alternativa para quienes tenemos varias contraseñas que recordar, y nunca las recordamos de primera.<br/><br/><a href="http://bernardorychtenberg.files.wordpress.com/2011/05/captura-de-pantalla-2011-05-01-a-las-12-02-44.png"><img class="size-medium wp-image-270" title="1Password" alt="" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/05/Captura-de-pantalla-2011-05-01-a-las-12.02.44-300x175.png" width="300" height="175" /></a><br/><br/>Link: <a title="1Password" href="http://agilewebsolutions.com/onepassword">1Password</a>Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com3tag:blogger.com,1999:blog-418342519666901547.post-47757490638176084622011-04-02T16:09:00.000-03:002013-08-04T22:30:32.210-03:00Eliminar programas de arranque de Mac OS - Snow LeopardTengo instalado en mi Mac el Media Center Plex, con el que estoy mas que contento. Sin embargo, no siempre que prendo la pc es para ver una película o una serie y me resulta bastante molesto esperar a que el Plex Media Server termine de cargar, etc. Sumado a que se come parte de la ram en cosas que no voy a usar. Comencé a buscar y no daba en la tecla de cómo sacarlo del arranque, hasta que al final lo logré. Dejo un mini tutorial de todos los lugares donde se pueden poner aplicaciones, scripts o incluso configuraciones, para que arranquen cuando se enciende el Mac.<br/><h3>1. Aplicaciones de arranque de usuario</h3><br/>Estas son las más comunes, y las que todo internet indica que hay que verificar en primera instancia. Se encuentran en Preferencias del Sistema / Cuentas / Arranque. La siguiente figura lo muestra mejor.<br/><div class="mceTemp mceIEcenter" style="text-align:center;"><dl id="attachment_256" class="wp-caption aligncenter" style="width:310px;"> <dt class="wp-caption-dt"><a href="http://bernardorychtenberg.files.wordpress.com/2011/04/captura-de-pantalla-2011-04-02-a-las-17-17-34.png"><img class="size-medium wp-image-256" title="Preferencias del sistema - cuentas" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/04/Captura-de-pantalla-2011-04-02-a-las-17.17.34-300x237.png" alt="Preferencias del sistema - cuentas" width="300" height="237" /></a></dt> <dd class="wp-caption-dd">Preferencias del sistema - cuentas</dd> </dl></div><br/>En el mismo se pueden agregar nuevas aplicaciones que deseamos que se inicien con el arranque del sistema o también eliminar las que ya tenemos si no nos interesa que sigan estando. Hasta aquí venía todo bien, pero mi Plex Media Server no estaba en la lista...<br/><h3>2. Launch Agents y Launch Daemons</h3><br/>Acá hay mas gente de esta que se inicializa al arranque... Los <em>Launch Agents</em> y <em>Launch Daemons</em> son dos tipos diferentes de servicios que utiliza mac desde hace varias ediciones de su sistema operativo. Se encuentran bajo archivos con extensiones .plist, que si los abrimos podemos ver a qué binario/script/archivo en general apunta, los argumentos que se pasan y alguna que otra opción más, dependiendo del caso. El funcionamiento es similar a lo que en linux hacemos con los archivos en /etc/init.d/ o /etc/rc. En particular, los archivos plist son manejados por <a href="http://en.wikipedia.org/wiki/Launchd">launchd</a>, un manager de servicios incorporado por Apple desde desde Mac OS Tiger. Launchd ejecuta /etc/rc y luego busca en diferentes lugares por archivos .plist para su ejecución.<br/><br/>Los mismos están ubicados en los siguientes lugares:<br/><br/>HDD/Librería/LaunchAgents<br/><br/>HDD/Librería/LaunchDaemons<br/><br/>HDD/Sistema/Librería/LaunchAgents<br/><br/>HDD/Sistema/Librería/LaunchDaemons<br/><br/>HDD/Usuarios/bernardo/Librería/LaunchAgents<br/><br/>Así que en este último encontré el agente de plex que hace que se levante el Media Server al arranque.<br/><div class="mceTemp mceIEcenter" style="text-align:center;"><dl id="attachment_257" class="wp-caption aligncenter" style="width:310px;"> <dt class="wp-caption-dt"><a href="http://bernardorychtenberg.files.wordpress.com/2011/04/captura-de-pantalla-2011-04-02-a-las-17-54-43.png"><img class="size-medium wp-image-257" title="LaunchAgents" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/04/Captura-de-pantalla-2011-04-02-a-las-17.54.43-300x133.png" alt="Carpeta de los LaunchAgents" width="300" height="133" /></a></dt> <dd class="wp-caption-dd">Carpeta de LaunchAgents</dd> </dl></div><br/> <br/><br/>Cuando doy botón derecho sobre el archivo .plist del plex, se abre la siguiente ventana.<br/><div class="mceTemp mceIEcenter" style="text-align:center;"><dl id="attachment_258" class="wp-caption aligncenter" style="width:310px;"> <dt class="wp-caption-dt"><a href="http://bernardorychtenberg.files.wordpress.com/2011/04/captura-de-pantalla-2011-04-02-a-las-17-54-58-e1301779301520.png"><img class="size-medium wp-image-258 " title="Archivo Plex .plist" src="http://myblog.bernardorychtenberg.com/wp-content/uploads/2011/04/Captura-de-pantalla-2011-04-02-a-las-17.54.58-300x172.png" alt="Archivo Plex .plist" width="300" height="172" /></a></dt> <dd class="wp-caption-dd">Archivo Plex .plist</dd> </dl></div><br/> <br/><br/>Acá según leí hay dos caminos. O eliminamos el archivo, o si tiene la opción de RunAtLoad, desmarcarla. En este caso voy a hacer eso.<br/><br/>Cuando reinicio mi pc, ya no tengo el fastidioso Plex Media Server corriendo. Cuando quiera encenderlo lo hago sin problemas.<br/><br/> <br/><h3>3. StartUpItems</h3><br/>Hay un tercer tipo de archivos que se pueden levantar con el arranque del sistema. Son los denominados StartUpItems. Son elementos que se ejecutan luego del arranque, pero antes de que cualquier usuario comience sesión. Se encuentran en:<br/><br/>HDD/Librería/StartupItems<br/><br/>HDD/Sistema/Librería/StartupItems<br/><br/>Bastará con borrar la entrada que corresponda para que no arranquen más con el SO.<br/><br/> <br/><br/> Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com1tag:blogger.com,1999:blog-418342519666901547.post-46520816161869796182011-04-02T08:38:00.000-03:002013-08-04T22:30:32.207-03:00Ruby: Creando clases y objetosLuego de tener idea básica del lenguaje y definición de métodos, veamos la creación de clases y objetos.<br/><pre>class Anfitrion<br/> def initialize(nombre=”Mundo”)<br/> @nombre = nombre<br/> end<br/><br/> def decir_hola<br/> puts “Hola #{@nombre)“<br/> end<br/><br/> def decir_adios<br/> puts “Adios #{@nombre}“<br/> end</pre><br/>De esa forma tenemos una clase anfitrión con dos métodos (decir_hola, decir_adios). Además se tiene una variable de instancia (@nombre) disponible durante la vida del objeto. Para crear el objeto:<br/><pre><br/>A = Anfitrion.new(“Bernardo“).<br/>A.decir_hola => “Hola Bernardo“<br/>A.decir_adios => “Adios Bernardo“<br/></pre><br/>Una aspecto interesante es que no podemos acceder a la variable de instancia como sí se puede en otros lenguajes. La expresión A.@nombre no es válida.<br/><br/>Anfitrion.instance_methods devuelve todos los métodos de instancia que se pueden invocar. Eso retorna todos los métodos disponibles de la clase Anfitrion y sus superclases. Si quisiéramos solamente los métodos que se definieron en la clase anfitrión y nada más, entonces bastará con poner: <pre>Anfitrion.instance_methods(false)</pre> En este caso se retornará <pre> => “[decir_hola, decir_adios]“</pre><br/><br/>Existe otra funcionalidad interesante que es la de respond_to?. Escribimos<br/><pre> Anfitrion.respond_to?(“nombre“)</pre><br/>y retornará false. Sin embargo si escribimos Anfitrion.respond_to?(“decir_hola“) retornará true. Si el objeto es capaz de responder a esos métodos entonces retorna true.<br/><br/>Para poder acceder y modificar los valores de las variables de clase, es necesario poner attr_accessor: nombres.<br/>De esa forma podemos acceder como a.nombre, donde a es el objeto instanciado de la clase Anfitrion.<br/><h4>Ejemplo....</h4><br/><br/><pre><br/>class MegaAnfitrion<br/> attr_accessor :nombres<br/><br/> # Crear el objeto<br/> def initialize(nombres = "Mundo")<br/> @nombres = nombres<br/> end<br/><br/> # Decirle hola a todos<br/> def decir_hola<br/> if @nombres.nil?<br/> puts "..."<br/> elsif @nombres.respond_to?("each")<br/><br/> # @nombres es una lista de algún tipo,<br/> # ¡así que podemos iterar!<br/> @nombres.each do |nombre|<br/> puts "Hola #{nombre}"<br/> end<br/> else<br/> puts "Hola #{@nombres}"<br/> end<br/> end<br/><br/> # Decirle adiós a todos<br/> def decir_adios<br/> if @nombres.nil?<br/> puts "..."<br/> elsif @nombres.respond_to?("join")<br/> # Juntar los elementos de la lista<br/> # usando la coma como separador<br/> puts "Adiós #{@nombres.join(", ")}. Vuelvan pronto."<br/> else<br/> puts "Adiós #{@nombres}. Vuelve pronto."<br/> end<br/> end<br/><br/>end<br/></pre><br/><br/><pre><br/>if __FILE__ == $0<br/> ma = MegaAnfitrion.new<br/> ma.decir_hola<br/> ma.decir_adios<br/><br/> # Cambiar el nombre a "Diego"<br/> ma.nombres = "Diego"<br/> ma.decir_hola<br/> ma.decir_adios<br/><br/> # Cambiar el nombre a un vector de nombres<br/> ma.nombres = ["Alberto", "Beatriz", "Carlos",<br/> "David", "Ernesto"]<br/> ma.decir_hola<br/> ma.decir_adios<br/><br/> # Cambiarlo a nil<br/> ma.nombres = nil<br/> ma.decir_hola<br/> ma.decir_adios<br/>end<br/></pre><br/><br/>Y hasta aquí llegué con Ruby. En cuanto profundice en él iré actualizando los posts. Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-12118636652452174162011-04-02T08:29:00.001-03:002013-08-04T22:30:32.193-03:00Ruby: Definiendo métodosLa sintáxis de definición de un método es similar a la sintaxis de python:<br/><pre><br/>def saludador<br/> puts “Hola mundo“<br/>end<br/></pre><br/><br/>“def“ es la definición del método llamado saludador. La palabra “end“ al final indica el fin del método.<br/><br/>La invocación del método requiere que solamente se escriba el nombre del mismo, en este caso <em>saludador</em>. También puede ser invocado como <em>saludador()</em>. En este caso tendrán el mismo comportamiento. Sin embargo este caso es un tanto particular, ya que no se pasan parámetros al método. En caso de tener parámetros se deberían pasar entre medio de los paréntesis, por ejemplo <em>saludador(“bernie”)</em>.<br/><br/><pre><br/>def saludador(nombre)<br/> puts “Hola #{nombre}“<br/>end<br/></pre><br/><br/> <br/><br/>Otra alternativa es definir el método con un valor por defecto para el paráemtro. Por ejemplo:<br/><br/><pre><br/>def saludador(nombre=”Mundo”)<br/> puts ”Hola #{nombre.capitalize}”<br/>end<br/></pre><br/><br/>En este caso se pone la primer letra del parámetro en mayúscula. Si invocamos:<br/><br/>Saludador ->; obtendremos la salida “Hola Mundo“<br/><br/>Dado que si no se pasa un parámetro, el mismo toma el valor (=”Mundo”).<br/><br/> Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-79857640898160191352011-04-02T08:29:00.000-03:002013-08-04T22:30:32.221-03:00Ruby: Primeros pasos...Hace un tiempo hice un tutorial de Ruby para aprender el lenguaje. La verdad es que me gustó, se asemejó bastante a Python en lo que refiere a sintaxis. No me dio el tiempo de ver performance, variedad de frameworks en la vuelta, etc. Sin embargo como primeros pasos para conocer la sintaxis básica puede servir. Pongo una serie de posts explicando conceptos básicos del lenguaje.<br/><h4>Accediendo a la consola</h4><br/>Para poder acceder a la consola de Ruby simplemente escribimos “irb“ en el terminal (si estamos en Mac OS o Linux, si estuviéramos en Windows sería Fxri).<br/><br/>Si quisieramos obtener la versión que tenemos instalada de Ruby en nuestro pc, basta con escribir “ruby -v“ en la terminal. La salida debería ser algo similar a la siguiente línea:<br/><br/>ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0].<br/><h4>Primeros pasos...</h4><br/>La salida de Ruby es con puts.<br/><br/>Puts “Hola mundo“ responderá en pantalla dos cosas:<br/><ol><br/> <li>Hola mundo</li><br/> <li>Nil.</li><br/></ol><br/>El nil es la salida de la evaluación del comando puts. Puts siempre retorna nil luego de una evaluación.<br/><br/>Las operaciones matemáticas son sencillamente como si fuera una calculadora, 2+3, 5*2, 5**2. Existen ciertos módulos como ser Math que agrupan funcionalidades similares, como ser Sqrt, Sin, Cos, Tan, etc. Para poder invocar ese tipo de operaciones es necesario escribir Math.sqrt(16). El resultado de ese mensaje será 4.0.<br/><br/> <br/><br/> Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-24155267697438386602011-04-02T06:48:00.000-03:002013-08-04T22:30:32.204-03:00Recuperar archivo adjunto editado y guardado... desde OutlookSuele ser bastante común, para quienes usan Outlook, abrir algún archivo adjunto desde el programa mismo y realizarle algún tipo de modificación. Entonces grabamos el archivo y un tiempo después cuando lo queremos recuperar... vamos al viejo correo que contenía el adjunto y lo abrimos. La sorpresa suele ser tan desagradable como el tiempo que le dedicamos a la edición: Los cambios que guardamos y que nunca se nos alertó de un error,<span style="color:#ff0000;"><strong> NO ESTÁN! </strong></span>(no nos alertó, porque en realidad no hay error).<br/><br/>Entonces, luego de un ratito en que estamos relajando a la PC, a Bill Gates y estamos a punto de comenzar el trabajo de nuevo, podemos intentar lo siguiente:<br/><br/>Inicio -> Examinar (en Windows Vista y Seven ya es directo en "Escribir comando") -> Regedit.<br/><br/>Vamos a<br/><br/>HKEY_USERSS-1-5-21-2743691432-338821429-3103819822-1106SoftwareMicrosoftOffice12.0OutlookSecurityOutlookSecureTempFolder<br/><br/>Luego de MicrosoftOffice pueden probar además de con 12.0, con las carpetas que tengan, 11.0, 10.0, 9.0, etc.<br/><br/>Damos doble click y nos vamos a encontrar con una ruta que nos indica donde es que Outlook almacena los archivos adjuntos que descarga para las ediciones. Así es que abrimos un Explorer de Windows, ponemos esa ruta y allí encontraremos el archivo que estabamos buscando.<br/><br/>Espero que sirva cuando se enfrenten a esos casos!<br/><br/>Saludos!<br/><br/> Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com11tag:blogger.com,1999:blog-418342519666901547.post-21080385074539095872011-01-16T10:57:00.000-03:002011-01-16T11:00:36.857-03:00FacePad - Una buena extensión para bajar tus fotos de FacebookSi queremos bajar las fotos de facebook en las que estamos etiquetados (asi como algún album en particular) Firefox tiene una extensión (a partir de la Versión 3) para poder hacerlo. Se llama "FacePad". Y simplemente hay que hacer click derecho sobre el album que queremos descargar (o eventualmente en el título "Todas mis fotos") y dar "Download with FacePad".<br />Simple y útil.Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com2tag:blogger.com,1999:blog-418342519666901547.post-59212008263495255622010-05-23T11:45:00.000-03:002010-05-23T11:48:14.856-03:00Print screen de la pantalla activaUna bobada monumental!! Pero no se por qué nunca recuerdo como era la combinación de teclas. Y así, cada vez que tengo que sacar un screenshot en Windows y no tengo ganas de andar recortando la pantalla que quiero, escribo en google: "printscreen active window"... y siempre arroja la misma respuesta... ALT + PRT.SCREEN.<br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com2tag:blogger.com,1999:blog-418342519666901547.post-15101541785578360552010-05-13T07:59:00.001-03:002010-05-13T08:01:22.971-03:00Django cheat sheet<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu7JGdyYvvuwRAoAXH2ih2TR1E1qCBmD-gxZT1VJ1-pWacgVqnSwLcl-sLWqmpn5T7Wkbsh1gv5a3_tO0UrMetowvhxwKkAvHU_OCfeo_-N6bpYvagDep9j-9JBipQCnO847yU22MtunoA/s1600/django095-cheat-sheet.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu7JGdyYvvuwRAoAXH2ih2TR1E1qCBmD-gxZT1VJ1-pWacgVqnSwLcl-sLWqmpn5T7Wkbsh1gv5a3_tO0UrMetowvhxwKkAvHU_OCfeo_-N6bpYvagDep9j-9JBipQCnO847yU22MtunoA/s320/django095-cheat-sheet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5470707785642033794" /></a><br />Esta es una muy buena referencia para quienes trabajan con Django. <br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com1tag:blogger.com,1999:blog-418342519666901547.post-13719592377784042072010-04-26T15:21:00.000-03:002010-07-11T14:33:43.550-03:00Compartiendo carpetas en Virtual BoxPara compartir carpetas entre el file system del sistema operativo que usamos (en mi caso Windows Seven) y el sistema que corre en nuestra maquina virtual (Ubuntu 9.10):<br />mkdir /media/compartida<br />sudo mount -t vboxsf compartida /media/compartida<br /><br />Donde "compartida" es el nombre que le pusimos al recurso compartido.Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-63809274043973365222010-04-11T11:27:00.000-03:002010-04-27T10:58:20.242-03:00Leyendo y guardando archivos en PythonLeer un archivo en python es algo muy complicado... casi tanto como este código:<br /><br /><pre class="brush: python"><br />'''<br />Created on 11/04/2010<br /><br />@author: Bernardo<br />@title: Leyendo un archivo csv con dos campos<br />'''<br />nombre_archivo = "prueba.csv"<br />f = open(nombre_archivo,'r')<br />for linea in f.readlines():<br /> linea_parseada = linea.split(';')<br /> print 'Campo 1: %s' %linea_parseada[0]<br /> print 'Campo 2: %s' %linea_parseada[1]<br />f.close()<br /></pre><br /><br />Guardando un archivo... esto es un poco mas complicado<br /><br /><pre class="brush: python"><br />'''<br />Created on 11/04/2010<br /><br />@author: Bernardo<br />@title: Grabando un archivo<br />'''<br />nombre_archivo = "salida.txt"<br />output = open(nombre_archivo,'w')<br />output.write("Lo que tenga que grabar.")<br />output.close()<br /></pre><br /><br />Y finalmente... <br /><pre class="brush: python"><br />'''<br />Created on 11/04/2010<br /><br />@author: Bernardo<br />@title: BernieLogV0.000001<br />'''<br />def log_error(message):<br /> error_log = open("Errores.log",'a')<br /> error_log.write(message)<br /> error_log.close()<br /></pre><br /><br />Es casi infitamente mas sencillo que en Java o C#. No hay que hacer trucos con ningún BufferReader, ni con ningún StreamReader o StreamWriter.<br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com1tag:blogger.com,1999:blog-418342519666901547.post-35320581060023299972010-04-11T11:16:00.000-03:002010-04-11T11:26:26.443-03:00Backupeando una base postgresA veces Postgres puede ser bastante molesto. Sumado a que la configuración de acceso al mismo (el bendito archivo pg_hba.conf) el sistema de respaldos no siempre es tan intuitivo para el usuario. Quiero decir, utilizando GUIS, como ser el pgadminIII, etc el respaldo de las bases de datos no siempre es trivial. Muchas veces genera errores, conflictos, etc.<br />De manera que la mejor manera de hacer respaldos de una base de datos postgres a mi criterio es dejar de lados los guis, y utilizar la consola de la siguiente manera:<br /><br />RESPALDO<br />Logueo como el usuario que quiere hacer el respaldo<br />su - postgres<br /><br />pg_dump nombre_base_de_datos > archivo.dmp<br /><br />* Es necesario muchas veces tener en cuenta que si nos queremos llevar el respaldo para otro lado el archivo se encuentra en /var/lib/psql<br /><br />LEVANTAR RESPALDO<br />Logueo como el usuario<br />su - postgres<br /><br />psql -d nombre_base_de_datos -f archivo_respaldo.dmp<br /><br />Espero sea de utilidad!<br /><br />Cabe destacar que tanto psql como pg_dump tienen argumentos que pueden investigarse para darle mas flexibilidad a la función, pueden verlos como "man pg_dump".<br /><br />Saludos,Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-38248858531771727362010-04-11T11:10:00.001-03:002010-04-11T11:16:19.747-03:00Agregando reference manager a Microsoft WordA veces suele ser útil tener algun manejador de referencias de los libros, papers, artículos que se leen para luego hacer referencia a ellos. Reference manager es un programa que permite hacerlo. Una de sus funcionalidades mas importantes, es el "acople" que brinda con Microsoft Word, lo que brinda la posibilidad de cuando se quiere hacer algun tipo de referencia a algún artículo se pueda hacer de manera directa.<br /><br />Para ello:<br />1. Utilizando Microsoft Word 2007 vamos a "opciones de word"<br />2. Avanzadas<br />3. Ubicaciones de archivos, y allí nos copiamos la ruta de Startup de Word. Luego cerramos Word.<br />4. Vamos al directorio de instalación de Reference manager<br />5. Copiamos los archivos <span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;">RM10Cwyw.dot ; RM10Cwyw.wll (dentro de la carpeta CWYW); al directorio de startup de word.<br />Y Listo! Se agrega una solapa "Complementos" al menu de Word, que permite la inserción de referencias utilizando bases de datos del refman.<br /><br />Saludos!<br /></span>Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com10tag:blogger.com,1999:blog-418342519666901547.post-84408095504208698442010-04-08T13:44:00.000-03:002010-04-11T11:16:31.315-03:00Buen libro de linea de comandos de LinuxEn general soy mas amante del "man command" que de libros que hablen de shells y esas cosas. Pero este esta muy bueno, verdaderamente.<br />Ahi va,<br /><br />saludos<br /><br />http://linuxcommand.org/tlcl.phpBernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com1tag:blogger.com,1999:blog-418342519666901547.post-17197580704163580002010-02-15T18:04:00.000-03:002010-02-15T18:10:15.669-03:00Iteradores en pythonUna de las cosas interesantes que tiene python es la construcción que permite hacer de iteradores. Desconozco si java lo permite hacer.<br />Aquí va la implementación:<br /><br /><pre class="brush: shell"><br />"Created on 15/05/2010<br />@author: Bernardo<br />"<br />def millon():<br /> i=0<br /> while i < 1000000:<br /> yield i<br /> i+=1<br /></pre><br /><br />Para llamarlo se hace de la siguiente manera:<br /><br /><pre class="brush: shell"><br />f = millon()<br />print f.next(), f.next()<br /></pre><br /><br />De esa manera se ahorra construir una lista de un millon de posiciones, reservar espacio, etc, etc. Se van devolviendo los valores en la medida que se necesitan.<br />Puede usarse:<br /><pre class="brush: shell"><br />print dir(f)<br /></pre><br />De esa manera se ven todas las operaciones asociadas a f.<br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-89024666798250810142010-02-15T12:07:00.000-03:002010-02-15T18:03:17.182-03:00Comprobar existencia de un archivo en BashA veces suele ser útil en los scripts comprobar si un archivo existe, para evitar acciones o tomar otras.<br />El siguiente código comprueba la existencia de un archivo y muestra en pantalla el correspondiente estado.<br /><br /><pre class="brush: shell"><br />#!/bin/bash<br />FILE=/home/bernie/Escritorio/pp<br /><br />if [ -e $FILE ]; then<br />echo El fichero existe<br />else<br />echo El fichero no existe<br />fi<br /></pre><br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com2tag:blogger.com,1999:blog-418342519666901547.post-48058054814437147632010-01-18T18:06:00.000-03:002010-01-18T18:08:44.588-03:00Lo mejor de Cheat-Sheets para LinuxLeo Linux* screw y encuentro esta recopilación de Cheat-Sheets para Linux. Muy buenas por cierto. <br /><br /><a href="http://www.linuxscrew.com/2009/12/21/best-of-linux-cheat-sheets/">LinuxScrew Cheat Sheets</a>Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-39707693279103834322010-01-18T17:43:00.000-03:002010-01-18T17:47:24.027-03:00Obtener nombre de la pc a partir de su IPComunmente en una red de área local, suele ser útil saber a quién corresponde cada pc. Muchas veces existen IP's reservadas para determinada tarea o lo que sea. <br />Con el comando: nbtstat -a NUMEROIP, se nos devuelve el nombre de la pc con la IP correspondiente. De esta manera puede ser útil ahorrarnos unos cuantos broadcast de e-mails diciendo "Quién está usando tal o cual IP?".<br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-60866100819810813942010-01-01T17:18:00.000-03:002010-02-15T14:50:17.870-03:00Listar las carpetas por tamaño en linuxSuele ser útil obtener los tamaños de los archivos de una pc. Muchas veces es necesario borrar ciertos archivos por falta de espacio, o saber cuál es el que ocupa mas, etc. El simple ls (o todos sus sabores ls -al, etc) no devuelve mas que el listado de las carpetas o archivos que se encuentran en un directorio. Para obtener la lista de carpetas ordenadas por tamaño, puede ser útil correr la siguiente línea:<br /><pre class="brush: shell"><br />for f in * ; do if [ -d "$f" ]; then du -sh "$f" ; fi done | sort -n<br /></pre><br />Espero que sea de utilidad!<br />Saludos!!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com3tag:blogger.com,1999:blog-418342519666901547.post-52152946155555880912010-01-01T17:14:00.000-03:002010-01-01T17:18:05.101-03:00Datos del Linux que corre en la PCEs un buen comando que sirve para obtener la versión del sistema operativo (linux) que está corriendo en una pc. <br /><br />lsb_release -a<br /><br />La info que se devuelve es algo así como: <br /><br />LSB Version: :core-3.0-ia32:core-3.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch<br />Distributor ID: RedHatEnterpriseAS<br />Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 4)<br />Release: 4<br />Codename: NahantUpdate4<br /><br />A veces suele ser importante (y util) saber que sistema operativo estamos corriendo. <br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-63162951666772755342009-12-06T01:19:00.000-03:002010-02-15T14:38:47.066-03:00Python Cliente-ServidorVa la programación de un cliente y un servidor en python. Son básicos, pero salieron en cuestión de 40 minutos y sirve para ver como funciona!<br />Aqui va entonces el cliente:<br /><br /><pre class="brush: python"><br />'''<br />Created on Oct 1, 2009<br /><br />@author: Bernardo<br />'''<br />import socket<br /><br />s = socket.socket()<br />s.connect(("localhost",9999))<br />while True:<br /> mensaje = raw_input("> ")<br /> print "Cliente mandando mensaje..."<br /> s.send(mensaje)<br /> if (mensaje == "Quit"):<br /> break<br />print "Adios! (Cliente)"<br />s.close()<br /></pre><br /><br />... y aquí va el servidor:<br /><pre class="brush: python"><br />'''<br />Created on Oct 1, 2009<br /><br />@author: Bernardo<br />'''<br />import socket<br /><br />s = socket.socket()<br />s.bind(("localhost",9999))<br />s.listen(10) # Acepta hasta 10 conexiones entrantes.<br />sc, address = s.accept()<br />print address<br />while True:<br /> recibido = sc.recv(1024)<br /> if (recibido=="Quit"):<br /> break<br /> print "Mensaje recibido: ", recibido<br /> print "Enviando respuesta..."<br /> sc.send(recibido)<br /><br />print "Adios! (Servidor)"<br /><br />sc.close()<br />s.close()<br /></pre><br /><br />Saludos!Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com5tag:blogger.com,1999:blog-418342519666901547.post-29462974337029395542009-12-06T00:38:00.000-03:002010-03-01T18:17:01.846-03:00Cargar propiedades desde un archivo en JavaSuele ser útil (e imprescindible) el hecho de cargar información desde archivos de configuración. Aquí va código Java que lo realiza.<br /><br /><br /><pre name="code" class="brush:java"><br />public class ResourcesManager {<br /><br /> private Properties properties;<br /><br /> public ResourcesManager(){<br /> this.properties = new Properties();<br /> this.loadResources();<br /> }<br /><br /> private void loadResources(){<br /> try {<br /> this.properties.load(ResourcesManager.class.getResourceAsStream("/Archivo.properties"));<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /><br /> public String getResource(String resourceName){<br /> return this.properties.getProperty(resourceName);<br /> }<br /><br />}<br /></pre><br /><br />Espero que sea util. Saludos,Bernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-26152006182081030262009-11-28T12:46:00.001-03:002009-11-28T12:47:20.164-03:00Arquitectura de base de datosExisten dos grandes tipos de arquitecturas en lo que refiere a un sistema de gestión de base de datos. Por un lado tenemos las arquitecturas centralizadas y por el otro las arquitecturas cliente-servidor. Este es un compendio con las características de cada una de ellas.<br /><br /><span style="font-weight:bold;">Arquitecturas centralizadas</span><br /><br />El avance de las arquitecturas de sistemas de computadoras supuso también una revisión de otro tipo de arquitecturas, entre ellos la de los sistemas de gestión de base de datos (de ahora en más y por razones obvias SGBD o DBMS).<br /><br />Las primeras arquitecturas eran llamadas Arquitecturas centralizadas y contaban con un macrocomputador o mainframe que proporcionaban el procesamiento principal a todas las funciones del sistema. Esto incluía programas de aplicación, interfaces de usuario, sumado a toda la funcionalidad de un SGBD.<br /><br />Los usuarios accedían al sistema mediante terminales, que solamente mostraban en pantalla información. Se llamaban terminales tontas, dado que su única función era la de visualización. Todo el procesamiento se hacía de manera remota en el mainframe, que cuando concluía de procesar y se proponía desplegarle algo al usuario, debía comunicarse con ese terminal enviándole la información y los controles de pantalla. Dicha comunicación entre el computador central y los terminales “tontos” se hacía mediante algún tipo de red de computadores.<br /><br />Los precios de Hardware habían descendido notoriamente, surgen las PC’s y la mayoría de los usuarios cambia los terminales que tenían por los nuevos PC’s dado que eran relativamente baratos, y generalmente se rompían poco. En un primer momento, la arquitectura de los sistemas no varió, se seguía usando un SGBD centralizado con PC’s remotas que se conectaban a una determinada máquina que era la encargada de realizar todas las funciones del SGBD.<br /><br />Poco a poco los SGBD fueron evolucionando y la arquitectura centralizada comenzaba a ser una limitante en cuanto al procesamiento que el usuario exigía, lo cual llevó a las arquitecturas SGBD Cliente-Servidor.<br /><br /><span style="font-weight:bold;">Arquitecturas cliente-servidor</span><br /><br />Las arquitecturas cliente-servidor se diseñan para manejar los nuevos entornos de cómputo, en los que hay muchos PC’s y estaciones de trabajo, servidores de ficheros, etc interconectados por medio de una red. Existen factores ajenos al desarrollo propio de la arquitectura, que son inherentes a la evolución de la tecnología en sí misma y que potencian el crecimiento de las arquitecturas cliente-servidor, como por ejemplo el bajo costo del hardware y las nuevas PC’s, o el desarrollo importante que tuvieron las redes de computadoras en ese último tiempo. Dado que las tareas se dividen en una arquitectura cliente-servidor, los requerimientos de los servidores bajan notoriamente respecto a lo que eran los mainframes.<br /><br />La idea principal es definir servidores especializados con funciones específicas. Es decir, conectar un cierto número de estaciones de trabajo o PC’s como clientes de un servidor de ficheros que se encarga de mantener los ficheros de la máquina cliente. Por ejemplo supongamos un servidor de impresoras, que posee un conjunto n de impresoras que debe gestionar. Pone a disposición de los clientes la impresora y cuando llega una petición de impresión el servidor es quién la recibe y la despacha a la impresora que considere más adecuada. Esto es extensible a todo tipo de servidores especializados dado que los recursos del servidor están a disposición de los clientes.<br /><br />Por otra parte el cliente, le proporciona al usuario las interfaces adecuadas para poder usar los servidores, así como también la potencia para el procesamiento para las aplicaciones locales.<br /><br />La misma idea puede también aplicarse al software, donde puede almacenarse un determinado software en una máquina y ponerlo a disposición de los clientes.<br /><br />La arquitectura cliente-servidor tiene una estructura con varios PC’s y menos mainframes, todos interconectados entre sí mediante algún tipo de red de computadoras. El cliente, provee capacidades de interfaz de usuario y procesamiento local. Si alguno de los clientes solicita cierta funcionalidad adicional, entonces la máquina cliente le conecta con un servidor que proporcione dicha funcionalidad. Un servidor es una máquina que puede proporcionar servicios ya sea de impresión, de ficheros, de acceso a una base de datos, etc.<br /><br /><span style="font-weight:bold;">Arquitectura cliente-servidor en un SGBD</span><br /><br />En un comienzo las bases de datos relacionales eran arquitecturas centralizadas. Con el paso del tiempo poco a poco esa arquitectura fue transformándose en una cliente-servidor. Los primeros aspectos que pasaron del lado del cliente fueron los programas de aplicación y la interfaz de usuario. De esta manera, y debido a que SQL estableció un lenguaje estándar que dividía lógicamente el cliente del servidor, las funcionalidades de transacción y consulta permanecen del lado del servidor, a menudo llamado servidor SQL o de consulta.<br /><br />En una arquitectura de este tipo, los programas de aplicación y la interfaz de usuario pueden ejecutarse en el cliente. Cuando un usuario solicita acceso al SGBD, se establece una conexión con el servidor mediante el protocolo ODBC (Open Data Base Connectivity) el cuál proporciona interfaces API para que las aplicaciones del lado del cliente puedan llamar al SGBD y comunicarse correctamente. La mayoría de los proveedores de SGBD proporcionan drivers ODBC. Java tiene otro estándar llamado JDBC, que cumple una función similar.<br /><br />En los sistemas de base de datos orientados a objetos se dividen los módulos del SGBD entre cliente y servidor. De esta manera el servidor se encarga de los módulos de manejo de almacenamiento de los datos en páginas de disco, recuperación, control de concurrencia, movimiento de páginas a disco y funcionalidades similares. Por otra parte, el cliente cuenta con funciones que corresponden a los módulos de gestión de interfaz de usuario, funciones de diccionario de datos, interacción entre el compilador de un determinado lenguaje y el SGBD.<br /><br />Nota final:<br /><br />Si se quiere puede investigarse más sobre lo referente a las arquitecturas cliente – servidor existen más tipos que requieren conceptos adicionales como por ejemplo las arquitecturas C-S de tres niveles, o incluso las base de datos distribuídas.<br /><br />*Fundamentos de sistemas de base de datos, 3a edición, R. Elmasri – S. Navathe<br /><br />*Sistemas de base de datos, 5a edición, Volúmen 1, C.J.DateBernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com0tag:blogger.com,1999:blog-418342519666901547.post-44602668186214422992009-11-28T12:43:00.000-03:002009-11-28T12:46:14.612-03:00Catálogo de un sistema de base de datosAcá va un material teórico que escribí hace un tiempo en el viejo blog. <br />Es un breve resumen que puede servir para la facultad en materias como Base de datos. <br />Espero les sirva!<br /><br />El catálogo de un sistema de base de datos no es más que una base de datos en sí misma a veces llamada metabase. Los contenidos de dicha base de datos son llamados metadatos. La función principal del catálogo es almacenar los esquemas de las bases de datos que el sistema mantiene. Mantiene una descripción de todos los niveles (véase arquitectura de tres esquemas o niveles) tanto del esquema interno como del externo y el conceptual.<br /><br />Esencialmente se guardan objetos que puedan resultar de interés para el sistema, como por ejemplo tablas, vistas, índices, usuarios, planes de aplicación, privilegios de acceso, etc. La información contenida en el catálogo es indispensable para que el sistema se comporte de manera adecuada. El conocer los índices que existen por ejemplo, facilitaría o influiría sin dudas en la planificación de la estrategia en una determinada consulta. El subsistema de autorización, chequeará por ejemplo que cada operación que intente realizar el usuario esté permitida. De manera que también vemos que el catálogo sirve para chequear la validez de una sentencia y mantener la integridad y la coherencia de los datos.<br /><br />Las consultas al catálogo pueden realizarse con las mismas sentencias que se consulta cualquier base de datos o tabla. Sin embargo las actualizaciones al catálogo (INSERT, DELETE, UPDATE) no son posibles. Pensemos un segundo que pasaría si permitiéramos aplicar estas sentencias en el catálogo. Podríamos por ejemplo, borrar una línea de la tabla syscolumns (tabla que contiene una fila por cada columna en alguna tabla del sistema). Si esto sucediera estaríamos eliminando una columna del catálogo y para el sistema esa columna no existiría más. De manera que cualquier intento por recuperar datos de esa columna fracasaría.<br /><br />En contraposición a estas sentencias existen otras proposiciones de definición de datos, como son CREATE TABLE, CREATE INDEX, DROP y ALTER. Cuando hacemos un CREATE TABLE, solamente se hace un ingreso en la tabla systables(tabla que contiene todas las tablas del sistema) del catálogo, sino que también se dan ingresos en la tabla syscolumns a todas las columnas que contiene la nueva tabla a crear.<br /><br />De manera similar el DROP equivale al DELETE y el ALTER al UPDATE.<br /><br />*Fundamentos de sistemas de base de datos, 3a edición, R. Elmasri – S. Navathe<br /><br />*Sistemas de base de datos, 5a edición, Volúmen 1, C.J.DateBernardohttp://www.blogger.com/profile/07711448632757778361noreply@blogger.com15