Software Libre y GNU linux
Bienvenidos al Blog de zkorpio. sitio para tratar temas acerca de Software libre.

Independientemente del sistema operativo que usemos sea este privativo o libre algo super importante que debemos hacer cuando administramos una red es hacer el denominado subnetting.


A que me refiero con esto? lo voy a explicar con un ejemplo:

imaginemonos que estamos en la empresa X y ellos ese momento tienen a su disposiciòn 16 màquinas, estas se van a conectar por una red de area local (lan), entonces nuestro trabajo es asignar a cada una de éstas una ip para que se puedan identificar en dicha red.

Podríamos tomar en consideraciòn que al no ser una red muy grande podemos utilizar una de clase C que va de los siguientes rangos: 192.xxx.xxx.xxx hasta 223.xxx.xxx.xxx y este tiene una mascara de subred 255.255.255.0

Digo que podríamos utilizar este tipo de red porque si nos fijamos en su mascara al tener un solo 0 esto quiere decir que podríamos tener hasta 255 máquinas conectadas cada una con su ip teóricamente porque en realidad podríamos usar 253 direcciones pues hay 2 que se reservan para uso de red y broadcast.

La parte facil es que podría usar cualquiera de estas 253 posibilidades para asignar a mis máquinas una ip ej:

maquina 1= 192.168.0.50 maquina 2= 192.168.0.80 maquina 3= 192.168.0.150 . . . maquina 16= 192.168.0.230

Pero al hacer esto estaríamos desperdiciando 237 ips que quedarían por ahi regadas (253-16) y esto no es recomendable pues puede degradar el rendimiento de nuestra red (cada vez que se hace broadcast tengo que comunicarme con tooodo mi rango de 253 posibilidades) y tambien podría tener problemas de seguridad pues los usuarios podrian cambiarse a su antojo de ips y de esta forma evitar algun tipo de bloqueo a nivel de direcciones, saltarse el proxy etc...

Lo mejor es entonces tratar de usar esta clase de red "C" pero acomodandolo a nuestras necesidades tratando en lo posible de que no queden muchas direcciones libres, de esta forma obtengo un mejor performance y de paso le doy un toque de seguridad, todo esto lo hago con el famoso subnetting.

Entonces el requisito del problema es claro: Deseo tener una red en la que solo use 16 direcciones ip, y evitar en lo posible tener regadas el resto de las 237 direcciones que no voy a usar.

Al grano, veamos un poquito de teoría específica que nos va a servir mas adelante 1) cada direccion ip ej: 192.68.10.16 si lo transformamos a codigo binario no es mas que un conjunto de ceros y unos entonces:

192.168.10.16 == 11000000.10101000.00001010.00010000

con esto deducimos que la direccion ip no es mas que un conjunto de 4 octetos binarios.

2) si nos fijamos en la mascara de esta clase de red clase C que es 255.255.255.0 si decimos que solo podemos usar 255 direcciones (teoricas) podemos deducir entonces que solo el ultimo octeto será usado para nuestros hosts y en binario nos quedaría:

255.255.255.0 == 11111111.11111111.11111111.00000000
                 ---------\/---------------.---\/---
                          RED                 HOST
Si has podido notar de ahora en adelante VAMOS A USAR 1 PARA NUESTRA PARTE DE RED Y 0 PARA NUESTRA PARTE DE HOST esto es muy importante para lo que vamos a hacer mas adelante.

Para hacer subnetting tenemos una pequeña formula: 2(exp n)-2 (dos elevada a la N menos 2) para no complicarnos solamente usaremos en principio 2(exp n)


Con esta premisas vamos para adelante:

les recuerdo el enunciado: Sea la red 192.168.10.0 (con esto me refiero a la red) deseo hacer subnetting para 16 usuarios.

1)al ser una red clase C mi mascara pura (cuando uso toooodas las 255 ips) será 255.255.255.0 entonces necesito subnetear la parte de host o sea mi mascara comenzaria asi:

255.255.255.00000000

2)para que pueda dejar solo 16 hosts para que se puedan usar entonces necesito pasar lo que me sobre al segmento de red para esto empleo la formulita 2(exp n) :

2(exp n)== 16 (host que necesito) => n=5 => 2(exp 5)==32

pero porque no use n=4 asi tendría justo los 16 hosts que necesito? No lo hice porque ese 16 es teórico y lo que necesito en realidad serían unos 18 para que pueda usar efectivamente mis 16 y como el numero que le sigue a 4 es 5 entonces para n uso el 5...

3) vamos a trabajar con la parte de 00000000 de nuestra mascara (255.255.255.00000000)

cuando necesito contar hosts (en mi ejemplo 16) lo vamos a hacer DE DERECHA A IZQUIERDA; vamos a tomar 5 ceros porque n==5 y los ceros que me sobren se lo pasaremos a la parte de red quedando asi.

              255.255.255.00000000
              |--------------|-----|
                   red       host


4)vamos a poner en práctica la teoría y convertir nuestro segmento de red en 1 (unos) y nuestro segmento de hosts en 0 (ceros) asi:
        
             255.255.255.11100000
            |--------------|-----|
                  red       host


5) Con este resultado podemos concluir que 2(exp 5)==32 numero de usuarios por subred y 2(exp 3)==8 subredes.

6)Al hacer solamente esta pequeña conversiòn ya podemos contar con nuestra nueva mascara de subred, esto lo hacemos transformando el binario obtenido (11100000) a decimal asi:

255.255.255.224

7)Pero bien en el paso 5 ya dedujimos que tendremos 8 subredes y 32 ips con la mascara 255.255.255.224 con esto tendríamos el ejercicio completo, pero que pasaría si quisieramos saber por ejemplo el numero de ip y broadcast que tendra nuestra subred numero 6 entonces haríamos lo siguiente.

8)Cogemos la ip pura (192.168.10.0) y la parte de host la convertimos a binario asi:

192.168.10.00000000

como nuestro ejercicio nos decía que 2(exp 5)== numero de host y 2(exp 3)== numero de subredes entonces:

          192.168.10.00000000
          -------------|----|
             subred     host


cogemos la parte de los ceros de subred: 000| 00000

y hacemos las posibles conbinaciones de binarios con estos 3 ceros de la subred asi: red host 000| 00000 posicion 0 001 00000 posicion 1 010 00000 posicion 2 011 00000 posicion 3 100 00000 posicion 4 101 00000 posicion 5 --- cogemos esta porque comienza por posicion cero 110 00000 posicion 6 111 00000 posicion 7


entonces tenemos la siguiente fila de la tabla anterior: 101 00000 == convertido a decimal toda la fila == 160 como deseo conocer tambien la ip de broadcast entonces convierto todo mi segmento de hosts a 1(unos) 101 11111 == convertido a decimal toda esta fila == 191

Entonces el resultado quedaría de la siguiente forma:

ip de red de la subred 6 == 192.168.10.160 ip de broadcast de la subred 6 == 192.168.10.191 --------------------------------------------------------------------------------------------


Puede darse el caso contrario es decir que dada una red 1921.68.10.0 deseo tener unas 16 subredes (antes fueron 16 hosts recuerdas?)

la formula es la misma solo que ahora busco un numero N que elevado me de como resultado al menos 18 entonces N==5

Entonces hago el proceso contrario, voy a pedir prestado unos bits al segmento de host (para sacar mis 32 subredes) este proceso lo hago de IZQUIERDA A DERECHA

255.255.255.0 == 11111111.11111111.11111111.00000000
                 ---------\/---------------.---\/---
                          RED                  HOST


11111111.11111111.11111111.00000000
--------------------------------|--|
          RED                   HOST


Como antes para saber mi nueva mascara transformo los ceros de la parte de red a unos (1) asi:

11111111.11111111.11111111.11111.000 en binario== 255.255.255.255.251 ESTA ES MI NUEVA MASCARA.

con esto he creado 32 subredes de las cuales 30 son subredes útiles cada una con 8 usuarios con 6 ip útiles

De esto si deseo ademas saber la ip y broadcast de la subred 6 entonces:

                     red   host
                     00000| 000  posicion 0  
                     00001  000  posicion 1  
                     00010  000  posicion 2  
                     00011  000  posicion 3  
                     00100  000  posicion 4
                     00101  000  posicion 5 --- cogemos esta porque comienza por posicion cero
                     00110  000  posicion 6
                     00111  000  posicion 7
                       .
                       .
                       .  
                     11111  000  posicion 32


usemos la fila escogida:
00101000 a decimal == 40 => nuestra ip será 192.168.10.40
para broadcast no nos olvidemos que la parte de host la hacemos (1) entonces 00101111 a decimal == 47 => nuestro broadcast será 192.168.10.47

---------------------------------------------------------------------------------------------


Un ejemplo algo diferente es si yo tengo una direccion IP (163.35.208.1) y tambien tengo la máscara (255.255.252.0) y deseo saber que tipo de red tengo entonces hacemos un denominado AND lógico a nuestros binarios:

1)Esta red es clase B por lo tanto una mascara pura sería 255.255.0.0 y la de nuestro ejemplo es: 255.255.252.0 por lo tanto si convertimos a binario la parte de host:

255.255.11111100.00000000

de esta conversiòn puedo deducir que tendre 2 (exp 6)subredes y 2(exp10) hosts teoricas.

Pero regresemos a lo propuesto entonces cogemos los 2 datos que tenemos y hacemos un and logico:

163.35.208.1 and 255.255.252.0 -------------- 163.35. xxx.0

con el xxx trabajaremos que es el que varía para el ejemplo:

208 en binario= 11010000 and 252 en binario= 11111100 ---------- 11010000 esto en decimal == 208 => mi ip de red sería 163.35.208.0

mi ip de broadcast sería == 163.35.11010011.11111111
continuara....
Continua...

 

Luego de haber pasado un tiempo desde la época de C, C++, Visual Basic 6.0, Visual.net C#, Visual j++, (todos entornos Microsoft que es lo que dan en la U.) he estado buscando un lenguaje de programación con el cual especializarme y que lleve en escencia la filosofía de software libre o el opensource.

Luego de haber pasado un tiempo desde la época de C, C++, Visual Basic 6.0, Visual.net C#, Visual j++, (todos entornos Microsoft que es lo que dan en la U.) he estado buscando un lenguaje de programación con el cual especializarme y que lleve en escencia la filosofía de software libre o el opensource.

Despues de pasarme un buen tiempo consultando con expertos en diferentes áreas de la Arquitectura de Software, visitando foros en los que se llevan a cabo calurosas discusiones acerca de "que lenguaje es el mejor" y tambien tratando de ver las nuevas tendencias pude llegar a la conclusión de que los lenguajes orientados a objetos son lo mas práctico al momento, y uno de los mas completos, funcionales y productivos que he podido encontrar es Java, despues de su liberación se espera avances mas rápidos en cuanto a tecnología de desarrollo web y móvil respecta; esto junto a un IDE que esta sonando mucho en la web como lo es Netbeans aspiro jugaran un papel importantísimo en cuanto a productividad se refiere. Me he comprado el libro thinking java versión español cuarta edición 2007 el mismo tiene unas 1000 hojas y se ve muy completo, cuando lo termine posteare mis experiencias al respecto.

El problema ahora mismo con este lenguaje es que la curva de aprendizaje es un poco larga justamente por las posibilidades que nos ofrece, por esta razón tambien he buscado uno que me pueda brindar rapidez en desarrollo web para usarlo bajo el modelo de prototipos o XP (Extreme Programming), obviamente que sea orientado a objetos, para poder ofrecer a mis clientes un desarrollo rápido, efectivo y que se pueda ajustar a sus necesidades (asi como las mias por supuesto).


Encontré un Maravilloso lenguaje de scripts dinámico llamado Ruby, que junto al framework llamado Rails definitivamente rompen paradigmas sobre como desarrollar software.

Con Ruby on rails (RoR) podemos desarrollar aplicaciones web de una forma realmente rápida, segura cuyo lema es "convención sobre configuración", cuya base formúla que si hay algo en desarrollo que es repetitivo entonces "Para que repetirlo?"; Este lenguaje/framework a diferencia de otros lenguajes cuyo Marketting nos hacen ver como si fueran la panacéa, se ha desarrollado siguendo las sugerencias y experiencias REALES de los desarrolladores quienes venían perdiendo mucho tiempo en el ciclo de vida del Software (desarrollo, mantenimiento, migraciones, escalabilidad); Asi que podemos decir que con RoR podemos ahorrarnos todos los problemas que por mas de 10 años los desarrolladores con experiencia les ha tocado sufrir al respecto.

Pero bueno no todo lo que se lee o escucha en la web tiene por que ser cierto asi que me he dedicado a leer un excelente libro que por un corto periodo de tiempo se esta regalando en la web; este se llama Build Your Own Ruby on Rails Web Applications de Patrick lenz que he notado es super práctico y te lleva de la mano en la creación de una web de opiniones completa.

Son unas 450 hojas en Inglés, voy por la 220 y uff me ha cambiado por completo la forma de pensar como programador. El hecho de ver al software con una perspectiva de MVC (modelo, vista, controlador) me permite facilmente separar la lógica de negocio/programación; Asi, con el modelo pienso como estará estructurada mi base de datos, en la vista sobre como estará la presentación visual orientada a mi cliente, y en el controlador como voy a interactuar entre el modelo y las vistas; A futuro, si deseo hacer cambios en la parte gráfica me remito a las vistas, si hay un cambio de mi bdd me dirijo al modelo etc... Con esto no pierdo tiempo entre miles de líneas de código porque aparte Ruby es un lenguaje super intuitivo que se asemeja a nuestro con lo que me ahorro muchas líneas redundantes muchas veces en otros lenguajes; Esto acompañado de helpers, generadores de código (por lo general repetitivo) me hacen ver una sola palabra: PRODUCTIVIDAD! Hasta ahora voy fascinado, les recomiendo leerse este libro que aunque está en inglés bien vale la pena para reforzar conocimientos de lenguaje extrangero ;) Este es el link que descarga directa, espero lo sepan aprovechar pues lo ofrecen gratis por 36 dias mas:

enlace libro RoR

En todo caso si desean una copia impresa del mismo me pueden contactar a: escorpio_ec@yahoo.com
Para muestra un botón, aca el video de como crear un blog con ruby on rails en 15 minutos:
Continua...

 

Hace un par de días me atreví a actualizar mi Ubuntu Feisty Fawn al renovado Gutsy Gibbon y aprovechar de esta forma mucha de las mejoras que nos ofrece el software libre.

No representó gran dificultad esta tarea, nada mas un update-manager

Hace un par de días me atreví a actualizar mi Ubuntu Feisty Fawn al renovado Gutsy Gibbon y aprovechar de esta forma mucha de las mejoras que nos ofrece el software libre.

No representó gran dificultad esta tarea, nada mas un update-manager -d desde mi consola y con privilegios de root; aunque lo tuve que hacer un par de veces pues me generaba un error en algunos sources list; luego de esto obtuve un mensaje que se me avisaba que habian paquetes obsoletos que necesitaría desinstalar ej: beryl y otros mas, al constatar que ninguno de estos iba a afectar a lo que ya tenía instalado en mi sistema acepté la condición y luego de algunas horas de descarga tenía mi nuevo Ubuntu casi totalmente funcional.

Y digo casi totalmente funcional pues una de mis aficiones es trabajar bajo el entorno 3d que nos ofrece beryl, pero luego haberse terminado la fusión entre Beryl y Compiz, ahora el paquete en Gnu-linux se llama compiz-fusion, entonces lo único que tuve que hacer es instalar desde mi consola este paquete: apt-get install compiz-fusion y listo, mi sistema mas funcional, estable y rápido que Feisty en mi amd de 64 bits.

Continua...

 

Si una empresa adquiere una licencia de software ej: windows xp, puede considerar que es propietario del software en realidad?

Si una empresa adquiere una licencia de software ej: windows xp, puede considerar que es propietario del software en realidad?



Si analizamos que segun el CLUF de la licencia de windows xp dice explìcitamente que el software por el que se pagó no se puede alquilar o revender y si este lo comparamos con un verdadero activo por ejemplo el inmobiliario en el que es completamente legal arrendarlo o hacer lo que deseamos entonces podemos concluir que mal haría una empresa en considerar que al adquirir (comprar) una licencia de software propietario esta pase a ser un activo mas para una empresa. Además si a esto le sumamos el controversial TCO (total cost of ownership), en el que por ejemplo por un software propietario como empresa he pagado unos 10.000 dólares en licencias y despues de un tiempo me doy cuenta de que para seguir teniendo un soporte y actualizaciones tengo que pagar unos 2000 dolares por año sino me encontraré con un software obsoleto entonces si que solamente lo estoy arrendando y en ningun momento será completamente de mi propiedad.



Pero si hablamos de software libre; pues una empresa que se haga un desarrollo a medida sobre este modelo de licenciamento (gpl, gpl2 etc...) estará seguro que con su software podrá hacer lo que desee, sea arrendarlo, venderlo y no estará sujeto a un pago anual en cuanto a licencias; si, es verdad talves necesite pagar por nuevas modificaciones pero será obviamente por mejoras totalmente palpables a sus propios intereses y beneficios pero en ningun momento estará atado por ningun lado; si el que me desarrollo mi herramienta se va, me da un pesimo servicio, cobra demasiado etc. pues busco otra persona/empresa que lo haga como lo deseo pues soy un auténtico dueño de mi código. Bajo esta premisa SOFTWARE LIBRE= ACTIVO DE UNA EMPRESA.


Reflexiones originales leídas en: web de pastillaroja.net

Continua...

 

Con unos pequeños cambios temporales en nuestro repositorio de Feisty podemos tener el nuevo y renovado OpenOffice 2.3 cuya versión trae cambios por demas importantes y significativos (ver link en ingles).
informacion sobre los cambios

Para esto solamente hacemos en una consola:

  • 1) Hacemos un backup de nuestros sources list:
sudo cp /etc/apt/sources.list /etc/apt/sources.backup
  • 2) Con esto cambiamos los repos de Feisty Fawn 7.04 a Gutsy Gibbon 7.10 beta
sudo sed -i 's/feisty/gutsy/g' /etc/apt/sources.list
  • 3) Con esto actualizamos nuestras listas de paquetes y por supuesto el OpenOffice que tengamos instalado
sudo apt-get update && sudo apt-get install openoffice.org -y
  • 4) Volvemos a nuestro repositorio de Feisty que lo teníamos previamente instalado:
sudo cp /etc/apt/sources.backup /etc/apt/sources.list && sudo apt-get update

Continua...