Facebook Fanpage


sábado, 21 de septiembre de 2013

Subir imagen al servidor con Yii Framework y eliminar imagenes del servidor

En esta ocacion les traigo la manera de como subir imagenes al servidor y una ves subidas las imagenes como eliminarlas del servidor, este ejemplo es la continuacion del ejemplo anterior pero mejorado, asi que sin mas aqui esta el codigo.


Vista:
archivo _form.php

Código PHP:
..//array de opciones del form...'htmlOptions' => array(
        
'enctype' => 'multipart/form-data',
    ),
...
..
//Otros Elementos..
..
<
div class="row">
        <?
php echo $form->labelEx($model,'imagen'); ?>        <?php echo CHtml::activeFileField($model'imagen'); ?>  //con esto levantamos la imagen
        <?php echo $form->error($model,'imagen'); ?></div>
<?php if($model->isNewRecord!='1'){ ?><div class="row">
     <?php echo CHtml::image(Yii::app()->request->baseUrl.'/banner/'.$model->imagen,"imagen",array("width"=>200)); ?>  // La Imagen se muestra aquí si la página es la página de actualización
</div>
 <?php } ?>
 
..
..
Otros elementos
..
.. 
Modelo:
solo es necesario agregar una linea en el metodo rules() en el Modelo, de la siguiente manera:

Código PHP:
array('imagen''file','types'=>'jpg, gif, png''allowEmpty'=>true'on'=>'update'), 
array('titulo, imagen''length''max'=>255'on'=>'insert,update'), 
Controladores
Código PHP:
    public function actionCreate()
    {
        
$model=new Banner;

        
// Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        
if(isset($_POST['Banner']))
        {
            
$rnd rand(0,9999);  // Generamos un numero aleatorio entre 0-9999
            
$model->attributes=$_POST['Banner'];

            
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
            
$imgNombre "{$rnd}-{$subiendoImagen}";  // numero aleatorio  + nombre de archivo
            
$model->imagen $imgNombre;


            if(
$model->save()){
                
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
                
$this->redirect(array('view','id'=>$model->id));
            }
        }
        
$this->render('create',array(
            
'model'=>$model,
        ));
    } 
Código PHP:
    public function actionUpdate($id)
    {
        
$model=$this->loadModel($id);

        if(isset(
$_POST['Banner']))
        {
            
$rnd rand(0,9999);  // Generamos un numero aleatorio entre 0-9999
            
$_POST['Banner']['imagen'] = $model->imagen;
            
$model->attributes=$_POST['Banner'];

            
$subiendoImagen=CUploadedFile::getInstance($model,'imagen');
            
$imgNombre "{$rnd}-{$subiendoImagen}";  // numero aleatorio  + nombre de archivo
            
$model->imagen $imgNombre;

            if(
$model->save()){
                if(!empty(
$subiendoImagen)){
                    
$subiendoImagen->saveAs(Yii::app()->basePath.'/../images/banner/'.$imgNombre);
                }
                
$this->redirect(array('view','id'=>$model->id));
            }
        }
        
$this->render('update',array(
            
'model'=>$model,
        ));
    } 




De paso, para borrar los archivos del servidor lo conseguí haciendo lo siguiente, (seguro no es la mejor forma pero funciona)

Código PHP:
    public function actionDelete($id)
    {
        
$model $this->loadModel($id);
        
unlink(Yii::app()->basePath.'/../images/banner/'.$model->imagen);
        
$this->loadModel($id)->delete();

        
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        
if(!isset($_GET['ajax']))
            
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
    } 





Fuente: Aqui

domingo, 21 de julio de 2013

crear host virtual

Cómo crear un VirtualHost en ubuntu y apache

En este post veremos qué es y cómo crear un virtual host utilizando ubuntu y apache.

¿Qué es un virtual host?

Un virtual host es una forma de poder utilizar varios dominios basados en una misma ip. Esto facilita el trabajo en un servidor local ya que podemos crear un dominio para cada aplicación que estemos desarrollando, por ejemplo, si estamos trabajando en un sitio de WordPress llamado misitio, podemos crear un virtual host para acceder a la instalación local de wordpress desde la url http://misitio.dev.
Los pasos que siguen a continuación dan por sentado que ya tenemos una instalación de apache funcionando en el servidor local.

Pasos a seguir para crear el virtual host en ubuntu

Estoy usando ubuntu como ejemplo, pero en otras distribuciones de linux los pasos van a ser muy similares.

Lo primero que debemos hacer es crear el virtual host, lo podemos hacer con el siguiente comando:

   sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/misitio.dev 
Sustituir misitio.dev por el nombre que le queremos dar al host.

Configurando el virtual host

Debemos configurar este archivo recién creado para que apache reconozca el dominio, abrimos el archivo en nano (u otro editor de texto):
   sudo nano /etc/apache2/sites-available/misitio.dev 
Ahora hay que agregar la siguiente línea en el archivo:
    ServerName misitio.dev  
El siguiente paso será cambiar la raíz del virtual host para que apunte al lugar dónde tenemos instalada la aplicación, en este caso de ejemplo sería: /var/www/misitio
   DocumentRoot /var/www/misitio 

Activar el host

Debemos activar el host en dos lugares diferentes, primero en apache:
   sudo a2ensite misitio.dev
Y luego en nuestro archivo /etc/hosts para que al entrar la url en el navegador, este se redireccione a nuestro servidor local y utilice el virtual host de apache.
Accedemos al archivo:
  sudo nano /etc/hosts 
Y agregamos la ip local y el nuevo dominio


   # Host Database
   #
   # localhost is used to configure the loopback interface
   # when the system is booting.  Do not change this entry.
   ##
   127.0.0.1       localhost

   #Virtual Hosts 
   127.0.0.1    misitio.dev

Reiniciar apache

Para que los cambios tengan efecto tenemos que reiniciar apache:
  sudo service apache2 restart
Espero que haya servido este pequeño tutorial y cualquier duda que les haya quedado envíenme un comentario que lo responderé a la brevedad.


fuente: http://fedesilva.com/blog/2013/04/como-crear-un-virtualhost-en-ubuntu-y-apache

martes, 11 de junio de 2013

Enviar formulario con ajax jquery

En el siguiente ejemplo, os mostraré como enviar un formulario vía AJAX, este proceso facilitará las consultas necesarias a PHP, todo ello sin tener que refrescar la página cada vez que hay que hacer una consulta, por ejemplo, a una base de datos.

Para el ejemplo vamos a usar dos archivos, uno será un "index.php" que será la página principal y el que albergará el form para realizar las consultas, al otro lo he llamado"dame-datos.php", este archivo recibirá las variables del formulario, las analizará y devolverá un resultado u otro según su valor, todo ello como dije anteriormente sin necesidad de refrescar la página, es la gran ventaja de AJAX.

El archivo index.php contiene un formulario con un campo de texto en el cual se solicita que ingreses un nombre, y un botón para enviar el formulario a través del método POST, a demás de un div dónde se mostrará el resultado de la consulta AJAX.

El archivo dame-datos.php recibe el valor del campo nombre y posteriormente analizar si el nombre se encuentra dentro de un array con tres nombres, si se encuentra devuelve una respuesta positiva y negativa si no es encontrado.

El código del archivo index.php es el siguiente ...


<html><head><script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script><script>   $(function(){ $("#btn_enviar").click(function(){ var url = "dame-datos.php"; // the script where you handle the form input.    $.ajax({           type: "POST",           url: url,           data: $("#formulario").serialize(), // serializes the form's elements.           success: function(data)           {               $("#respuesta").html(data); // show response from the php script.           }         });
    return false; // avoid to execute the actual submit of the form. });});</script></head><body><center><form method="post" id="formulario">Al enviar el formulario vía ajax, consultaremos en el archivo dame-datos.php si el valor del campo nombre se encuentra en el array y la respuestas será positiva o negativa, según su valor.<br>El Array contiene los siguientes nombres ... <b>antonio, pedro, alberto</b><br><table><tr><td>Introduce un nombre:</td><td><input type="text" name="nombre"></td><td></td><td><input type="button" id="btn_enviar" value="Buscar nombre"></td></tr></table></form><div id="respuesta"></div></center></body></html>



El código del archivo dame-datos.php es el siguiente ...



<?php
$resultado = "";
$nombre = htmlspecialchars($_POST["nombre"]);
$array = array("antonio""pedro""alberto");
for ($x=0; $x<count($array); $x++)
{
    if ($nombre == $array[$x])
{
$resultado = "El nombre ".$array[$x]." <b>SI</b> se encuentra en la base de datos<br><br>";
}
}
if($resultado == "")
{
    echo "El nombre ".$nombre." <b>NO</b> se encuentra en la base de datos<br><br>";
}
else
{
echo $resultado;
}
?>

Ajax Form
Ajax Form


miércoles, 29 de mayo de 2013

Instalar Symfony2 desde cero

Hola amigos bloggueros hoy les dire como instalar Symfony2 versión 2.2.1, no soy un experoto en el tema a decir verdad es la primera vez que instalo symfony2, la instalación la realizare en un entorno linux, yo personalmente estoy utilizando LinuxMint14.
Lo primero que expliare es como configurar un servidor web en nuestro equipo y despues explicare la instalación de Symfony2, la instalación la hago desde cero para que aquellos que se estan iniciando en el mundo de la programación puedan instalar este espectacular framewirk.


1) Primero instalamos Apache
# apt-get install apache2 apache2.2-common apache2-utils ssl-cert  apache2-mpm-prefork
2) Instalamos y habilitamos el módulo para utilizar modrewrite
# apt-get install libapache2-mod-proxy-html
Para habilitar el modulo en apache, ejecutamos:
# a2enmod rewrite
3) Instalamos PHP5
# apt-get install php5 libapache2-mod-php5 php5-common php5-intl
4) Instalamos Mysql
# apt-get install mysql-server mysql-client php5-mysql
5) Por último instalamos phpmyadmi
# apt-get install phpmyadmin
 
Con estos sencillos pasos ya tendremos un servidor web instalado en nuestro equipo.

Ahora continuamos con la instalación de Symfony2.  
Mi IDE favorito para programar es Netbeans, por lo que es el que utilizaré en este ejemplo. Si no lo hemos cambiado, nuestro workspace (donde se encuentran los proyectos a los que podemos acceder desde Netbeans) lo encontraremos en la carpeta NetBeansProjects en nuestra carpeta Home.

1) Procedemos a crear una nueva carpeta con el nombre de nuestro proyecto en el workspace de Netbeans:
$ mkdir /home/NetBeansProjects/miproyecto
2)Entramos en la carpeta que acabamos de crear:
$ cd /home/NetBeansProjects/miproyecto
3)Descargamos Symfony2 (comprueba la última versión en http://symfony.com/download):
Y descomprimimos:
$ tar zxvf Symfony_Standard_Vendors_2.0.0-RC4.tgz
4)Borramos el archivo comprimido que hemos descargado:
$ rm Symfony_Standard_Vendors_2.0.0-RC4.tgz
 
Ya tenemos instalado un proyecto básico en Symfony2. Ahora vamos a configurar Apache para poder acceder desde nuestro navegador favorito.

1) Creamos un nuevo archivo donde irá la configuración de nuestra web:
# vi /etc/apache2/sites-available/miproyecto
Que contendrá el siguiente contenido (cambia “jhongo” por el nombre de tu carpeta Home):

<VirtualHost *:80>
   ServerAdmin email@email.com
   DocumentRoot /home/jhongo/NetBeansProjects/miproyecto/Symfony/web
   ServerName miproyecto.com
   ServerAlias *.miproyecto.com
   ErrorLog /var/log/apache2/miproyecto_error.log
   CustomLog /var/log/apache2/miproyecto_access.log common
   DirectoryIndex index.php
   <Directory "/home/jhongo/NetBeansProjects/miproyecto/Symfony/web">
        Options Indexes FollowSymLinks
        Order Allow,Deny
        Allow from all
        AllowOverride all
        <IfModule mod_php5.c>
           php_admin_flag engine on
           php_admin_flag safe_mode off
           php_admin_value open_basedir none
        </ifModule>
   </Directory>
</VirtualHost>
 
2) Creamos un enlace simbólico de este archivo en sites-enabled para indicar que es una web activa:
# ln -s /etc/apache2/sites-available/miproyecto /etc/apache2/sites-enabled/miproyecto
3) Para que se apliquen los cambios, reiniciamos el servidor Apache:
# /etc/init.d/apache2 restart
4) Por último, forzamos en el archivo /etc/hosts la ip de nuestra web, que en este caso será localhost o 127.0.0.1
# vim /etc/hosts
5) añadimos esta línea al final del fichero:
127.0.0.1 www.miproyecto.com miproyecto.com
 
Después de todo esto, ya podremos acceder a nuestro nuevo proyecto en Symfony2 desde el navegador escribiendo la url que hemos configurado (www.miproyecto.com ó miproyecto.com).

Como primer paso, debemos comprobar si cumplimos con la configuración básica para que funcione nuestro proyecto. Lo haremos desde la siguiente url:

http://miproyecto.com/config.php

Symfony2 config

Como vemos, nos encontramos con dos problemas (podríamos tener más, deberemos resolverlos según sea necesario). En este caso el error es que las carpetas app/cache y app/logs no tienen los permisos necesarios.

Lo arreglaremos así:
chmod 777 /home/NetBeansProjects/miproyecto/Symfony/app/cache
chmod 777 /home/NetBeansProjects/miproyecto/Symfony/app/logs
 
En ocaciones nos genera problemas la intalación con el composer, así que explicare la corrección de este error, empesemos:

  1. Abre una consola de comandos y accede al directorio raíz de tu proyecto Symfony2: 
  2. Ejecuta el siguiente comando:
     
    $ curl -s https://getcomposer.org/installer | php
      
    
   3. Instalamos librerias de terceros
      
     $ php composer.phar install
 
Si todo ha funcionado bien, en el directorio raíz de tu proyecto Symfony2 verás un nuevo archivo llamado composer.phar.

Para comprobar que se ha instalado correctamente, ejecuta el siguiente comando que muestra el menú de opciones de Composer:

$ php composer.phar
 
Instalar Composer de esta manera es correcto, pero te obliga a realizar una nueva instalación para cada proyecto Symfony2. Si tienes muchos proyectos, es mucho mejor que instales Composer de forma global en tu ordenador, para que todos los proyectos utilicen la misma versión de Composer.

Para instalar Composer globalmente, mueve el archivo composer.phar a algún directorio ejecutable del sistema, como por ejemplo:

$ sudo mv composer.phar /usr/local/bin/composer
 
Comprueba que todo funciona bien ejecutando el comando composer sin opciones desde cualquier directorio del sistema.

La instalación global de Composer también facilita su mantenimiento, ya que sólo hay que ejecutar el siguiente comando para actualizar la versión de Composer de todos los proyectos:

$ sudo composer self-update



Una vez arreglados los problemas, ya podemos acceder a nuestro proyecto web con Symfony2 mediante esta url:

http://miproyecto.com/app_dev.php/

Symfony2 home

domingo, 26 de mayo de 2013

Problemas con msvcr100.dll instalando Wampserver en Windows

Si nuestro sistema no dispone de la librería msvcr100.dll de visual C++ (de Micrrosoft), al instalar wampserver recibiremos un error y Wampserver no se iniciará correctamente…

Este puede ser uno de los problemas más comunes de los nuevos usuarios de Wampserver..!!!

Desarrollo wampserver para Windows
Resulta que últimamente se habla de sobre errores, y que wamp no se isntala bien, y que se queda “Color Naranja” el icono y problemas similares.
Que si existen desde luego…!!!
En este artículo sólo pretendo recordar que hay veces que al descargar Wampserver desde la Web del autor, olvidamos instalar las librerias necesarias C++ para quewampserver funcione corretamente.
 

A pesar de que el autor de wampserver lo sugiere…

link-y-solucion-para-wampserver
Si que es cierto, que en la caja de los links de las descargas y soluciones, viene el texto en inglés, y eso puede acarrear algún contratiempo y uno no se percate que nos avisa que si no disponemos de las librerias C++ mejor las descarguemos de la web deMicrosoft, para no tener problemas en la instalación.
Hay que reconocerlo…???
======================================================================

En la caja de diálogo de Wampserver, no ofrece tres enlaces;
1- El del archivo de la aplicación

2- El de la actualización y solución para sistemas de windows de 32bit (x86)
c++-para-32bits

3- El de la actualización y solución para sistemas de windows de 64bit (x64)
c++-para-64bits

Podemos descargar la actualización que mejor nos convenga y la instalamos.
======================================================================
 

Si no disponemos en nuestro sistema el archivo MSVCR100.dll, durante la comoda instalación de wampserver obtendremos este error..!!!

Error msvcr100.dll no encontrado
Aunque no impedrirá finalizar la instalación de Wampserver, Apache no funcionará, incluso volviendo a instalar los servicios una y otra vez.
Este problema puede pasar en cualquier sistema operativo de windows, pero yo personalmente en el que he visto más esta caja de error, ha sido en Windows 8 pro, que es el sistema que estoy usando ahora actualmente.
No olvidéis descargar e instalar los paquetes de Microsoft para la versión que estéis usando.
Os ahorrareis algunos quebraderos de cabeza.
======================================================================
 

También se puede obtener el archivo MSVCR100.dll…

También se puede obtener el archivo “msvcr100.dll” desde una web externa a la deMicrosoft.
Yo lo he probado y funciona perfectamente, a decir verdad lo estoy usando en el sistema en el que estoy escribiendo este artículo, y lo descargue de aquí…
http://es.dll-files.com/msvcr100.dll.html
Si te decides por estos “lares“, es bajo tu responsabilidad.
Funciona correctamente y parece alejado del tema del “Malware” y malos “rollos“, o sea que no parecen ser archivos dudosos y corruptos.
Creo que es una web totalmente seria y a mí me ha funcionado, pero he de reconocer que antes de usarlo le he pasado el antivirus “Comodo” y uno online conVirustotal y no he obtenido problemas.
Pero no olvidemos leer la forma de instalarlo que anuncian desde la web…!!
saludos…
 
======================================================================
Si te sientes libre, deberias conocer otras opciones libres..!!!
======================================================================

lunes, 20 de mayo de 2013

Herramientas para comprimir CSS y Javascript

Los que trabajamos con proyectos web tenemos que estar atentos al tiempo que tardan nuestras páginas en ser abiertas por los navegadores.
Una de las técnicas más usadas para reducir este tiempo es el reducir el tamaño de los archivos css y Javascript, existiendo varias herramientas que podemos utilizar (aunque también hay como hacerlo desde el htaccess). Aquí os dejo con una lista publicada hace unos meses en devcurry.com





  • JSMin – borra comentarios y espacios en blanco en los archivos JS.
  •  JSO (JavaScript Optimizer) – Permite gestionar los archivos JS y CSS controlando la cantidad de datos transmitidos entre servidor y cliente.
  •  Packer – Comprime JS desde la web.
  •  JSCompress.com – Usa JSMin o Packer para reducir el tamaño de los ficheros
  •  YUI Compressor – Herramienta de Yahoo que promete ser la más segura y eficiente de todas.

domingo, 19 de mayo de 2013

Heramientas en javascript para acelerar la creación y mejorar los formularios


Cuando nos enfrentamos al desarrollo de formularios, los cuales se deben resolver rápidamente y debe tener determinadas características, nos vuelve a nosotros cientos de sitios que visitamos con diferentes "plugins" y herramientas que nos podrían servir.



Sin embargo, arrancamos a navegar y se nos cruza por la cabeza ideas y vamos agregándole características que de a poco nos va cerrando.
Este proceso nos lleva tiempo, bastante y ni pensar en herramientas que no se lleguen a integrar perfectamente.
Ese fue mi caso, y bueno ahora como simple reducción de tiempo, deseo compartir algunas herramientas que vienen a suplir la necesidad de buscar (es obvio que lo que usamos anteriormente, no llegamos a guardarlo)
Resumo algunas herramientas interesantes



Es un framework para la construcción y validación de formularios en HTML5 y apuntando al concepto de responsive web design.

Característica:
Completanmete responsive
Soporte de teclado
Inputs personalizable para select, radio, checkbox y file
Calendario personalizado usando jQuery UI (con fallback)
Validación "Sobre Item o On the spot"
Localization
Texto de sugerencia para HTML5

Soporte para:
IE8+, Webkit, Firefox, Opera, iOS5+, Android 4.0+
jQuery: 1.7+, UI 1.8+
Licencia: GPL or MIT


JQuery File Upload


Caracteristicas
Soporta subida Multiple (file upload)
Soporte Drag & Drop
Barra de progreso para las subidas.
Subidas Cancelables
Permite recontinuar subidas.
Permite subida por bloques
Cambio de tamaño del lado de cliente para las imágenes. Resize.
Soporte imágenes previa
No se necesitan plugins extra, como Flash.
Subida via XMLHttpRequests si soporte y empleo de iframes como fallback para navegadores sin soporte.

Requerimientos:

jQuery v. 1.6+
jQuery UI widget factory v. 1.8+
jQuery Iframe Transport plugin (included)
JavaScript Templates engine v. 2.1.0+ (optional)
JavaScript Load Image function v. 1.1.6+ (optional)
JavaScript Canvas to Blob function v. 2.0.0+ (optional)
Bootstrap CSS Toolkit v. 2.0+ (optional)



Validar los dominios de email? mas fácil que emplear Kicksend email, no hay. Altamente recomendable.

Si quieres agregar autocomplete, recomiendo que evalúes esta opción TextJS


Sin embargo existe un Framework mas completo, o al menos integra la mayoria de los elementos básicos para la creación de formularios como es el de 99Lime
Es bueno que den una ojeada a Kickstart

Espero les sirva, Saludos!

Colección de plugins para mejorar el rendimiento editando HTML, CSS, PHP en nuestros códigos bajo SublimeText2


Luego de evaluar y realmente admitir que este editor de texto es TREMENDO, quizás quizás por la simplicidad de uso, o por las posibilidades de expansión que este tiene (permite cambiar los shortcuts, agregar propios, permite plugins, soporte múltiple lenguajes, etc.).




Además de admitir que es un editor liviano, y por encima de todo pensado para y por programadores, rescato el alto nivel de adopción por parte de la comunidad de programadores.

Quizas esto se deba en gran medida al soporte de multiple plataformas (*nix /Windows/Mac)
Es importante también destacar lo simple que es implementar un plugin o desarrollar uno sin tener que ser un programador en un lenguaje mas complejo. En este caso los plugins estan desarrollado en el sencillo lenguaje Python.

Te dejo una hoja de trucos que puede llegar a servirte (fuente Falasco.org)


http://falasco.org/img-falasco.org/download/cheatsheet-sublimetext2.pdf



Bueno comencemos con el listado de plugins que me parecieron mas que necesarios e interesantes para cualquier desarrollador web:


A Sublime Text 2 plugin that uploads code snippets to JustPaste.me. Once uploaded, the link is immediately copied to your clipboard, ready to share with your friends!
https://github.com/Apathetic012/JustPaste#readme



Sublime Text CSS Media Query Snippets:Coleccion de snippets de media query para los usos mas comunes (layouts base)

Desktop/Laptop
Ipad (general)
Ipad Landscape
Ipad Portrait
Smartphone (general)
Iphone 4 (retina)
Smartphone Portrait
Smartphone Landscape
https://github.com/davezatch/Media-Query-Snippets


PHP Syntax Checker:Este plugin permite verificar la sintaxis del archivo PHP editado al momento de guardar los cambios.
https://github.com/naomichi-y/php_syntax_checker


MySignature - Sublime text 2 plugin:Es un plugin liviano que mejora las caracteristicas de autocompletado, agregandole al popup presentado la forma de el método y su argumento.
Este plugin esta orientado para javascript.
https://github.com/eladyarkoni/MySignaturePlugin


HTML Attributes:Te permite mejorar el autocomplete de los atributos para HTML.
https://github.com/agibsonsw/HTMLAttributes

SublimeText Doctypes:Este es un paquete de Sublime Text el cual incluye snippets, fragmentos de codigo para el uso del tipo de documentos html a usar
https://github.com/datevid/sublime-text-doctypes


AndyJS: JS y jQuery autocompletado
 

Es necesario colocar un archivo de sintaxis, se explica en el sitio. Una vez disponible, se puede conmutar entre javascript y JQuery.

https://github.com/agibsonsw/AndyJS



Un poco mas sobre los plugins.

Si estas interesado en desarrollar plugins existe mucha info en el foro de Sublime como tambien herramientas, pero lo básico es manejar un poco de python.
Tenes un instructivo muy básico en http://www.sublimetext.com/docs/plugin-basics
Sin embargo en NetTuts tenes un tutorial mas que interesante

Un plugin bastante interesante es el AndyPython que te va a simplificar el desarrollo de estos.
Incluye autocompletado para el API de Subllime. Ideal para comenzar a desarrollar tus propios plugins
https://github.com/agibsonsw/AndyPython

jueves, 2 de mayo de 2013

Crear Subredes Clase A, B, C






Este manual tratara de explicar en breves pasos el metodo de creacion de subredes o mejor conocido 
como Subneteo. El primer paso que debemos recordar son las clases de redes que existen para nuestro 
uso, estas son 3 las cuales enumero a continuacion: 
– Clase A : comprendida de la red 1 a la 126 
– Clase B: comprendida de la red 128 a la 191 
– Clase C: comprendida de la red 192 a la 224 

Ahora tenemos que recordar cuales son las mascaras de subred que tienen por default cada una de las 
clases de Red. 
– Clase A: 255.0.0.0 
– Clase B: 255.255.0.0 
– Clase C: 255.255.255.0 

Teniendo estos conceptos claros entraremos en materia , ¿Para que nos sirve crear subredes? 
La respuesta es que crear subredes nos permite tener una mejor administracion de red. Aunque no es el 
unico motivo, el motivo mas importante es que cuando creamos subredes reducimos el trafico de 
broadcast de nuestra red global. 

No solo es crear subredes y ya , tenemos que estudiar la cantidad de subredes que necesitamos , el 
crecimiento que tendra la empresa. Con este pequeño estudio podremos decidir que clase de red es la 
que mas nos conviene. 

Con fines practicos utilizaremos una red de Clase A que sera la 10.0.0.0 y haremos 7 subredes. 

Recordemos la mascara de subred de este tipo de clase; 255.0.0.0. Hecho esto empezemos con el 
subneteo propiamente dicho. 
La ecuacion que define la cantidad de bits que tenemos que tomar prestados a la parte de la mascara de 
subred para crear las subredes necesarias es la siguiente: 
2N - 2 = x donde “N” es el numero de bits que pediremos prestados y “x” es el numero de subredes 
que queremos. 

En este caso vamos a sustituir los valores que tenemos. 2N - 2 = 7 , ya tenemos el valor de las subredes 
que necesitamos ahora solo tenemos que buscar una potencia de dos que al restarle dos nos de 7 o mas, 
si ocupamos el valor de “3” tenemos 8 pero al restarle “2” solo nos quedan 6, entonces no nos sirve. 
Por lo cual el numero “4” es el indicado ya que al elevar y restar 2 nos quedan 14 redes utilizables , 
aquí se pueden preguntar que solo queremos 7 y las demas que se le van a hacer , bueno pues las 7 
restantes se pueden guardar para un posterior uso. 


Volvamos a sustituir el nuevo numero en nuestra formula inicial 24 – 2 = 14. Como digimos 
anteriormente “N” es el numero de bits que tomariamos prestados a la mascara de subred para poder 
crear las subredes, por lo que tomaremos 4 bits de que octeto se preguntaran, estan de acuerdo que los 
bits del primer octeto ya estan ocupados y que por eso es el numero 255 en decimal. 
Dejenme explicarlo con mas detalle, 255.0.0.0 , es el numero decimal que representa la mascara de 
subred, pero el numero real es un numero en binario que se veria de la siguiente forma: 
11111111.00000000.00000000.00000000 

Recordemos lo que aprendimos en electronica, donde 1 representa encendido y 0 es apagado, aquí lo 
aplicamos a que 1 esta lleno y el 0 es vacio. 
Por eso digo que el primer octeto ya esta ocupado , por eso los 4 bits los tomaremos del octeto 
siguiente con lo cual podriamos decir que la nueva mascara de subred en modo binario quedaria de 
esta forma: 
11111111.11110000.00000000.00000000 

Ahora convirtamoslo a decimal para saber que numero es y asi lo pongamos en la configuracion. 
255.240.0.0 En decimal esa es la nueva mascara de subred que ocuparan todas las subredes que 
tengamos. Ahora solo nos falta encontrar de que tamaño seran las subredes que haremos. 
Aquí veamos otro concepto, Cuantas numeros existen en el rango de 0 a 255 ? Si contamos tambien a 
el numero 0 como un valor real tendriamos 256 numeros, de acuerdo. 
Ahora si a esos 256 valores les restamos el numero que encontramos en la mascara de subred ya 
tendremos los numeros que sobran que seran los saltos de cada subred. 
256-240 = 16 Los saltos seran de 16 en 16 pero en que octeto haremos los saltos? Bueno recordemos 
cual es la red que ibamos a subnetear y la mascara de subred que hicimos: 
la red es la 10.0.0.0 y la mascara nueva de subred es la 255.240.0.0 , estamos de acuerdo que el octeto 
que modificamos de la mascara de subred es el segundo asi que el octeto que tenemos que modificar en 
la red tambien tiene que ser el segundo, asi que si hubieramos modificado el tercero se tendria que 
hacer el proceso en el tercero. 

Ahora ya empezaremos a crear las subredes. 


Numero de Subred Subred Broadcast Rango de IP's Utilizables 


# SubredSubredBroatcastRango de Host Utilizables
110.0.0.010.15.255.25510.0.0.1 10.15.255.254
210.16.0.010.31.255.25510.16.0.1 10.31.255.254
310.32.0.010.47.255.25510.32.0.1 10.47.255.254
410.48.0.010.63.255.25510.48.0.1 10.63.255.254
510.64.0.010.79.255.25510.64.0.1 10.79.255.254
610.80.0.010.95.255.25510.80.0.1 10.95.255.254
710.96.0.010.111.255.25510.96.0.1 10.111.255.254
810.112.0.010.127.255.25510.112.0.1 10.127.255.254
910.128.0.010.143.255.25510.128.0.1 10.143.255.254
1010.144.0.010.159.255.25510.144.0.1 10.159.255.254
1110.160.0.010.175.255.25510.160.0.1 10.175.255.254
1210.176.0.010.191.255.25510.176.0.1 10.191.255.254
1310.192.0.010.207.255.25510.192.0.1 10.207.255.254
1410.208.0.010.223.255.25510.208.0.1 10.223.255.254
1510.224.0.010.239.255.25510.224.0.1 10.239.255.254
1610.240.0.010.255.255.25510.240.0.1 10.255.255.254

1 10.0.0.0 10.15.255.255 10.0.0.1 10.15.255.254 
2 10.16.0.0 10.31.255.255 10.16.0.1 10.31.255.254 
3 10.32.0.0 10.47.255.255 10.32.0.1 10.47.255.254 
4 10.48.0.0 10.63.255.255 10.48.0.1 10.63.255.254 
5 10.64.0.0 10.79.255.255 10.64.0.1 10.79.255.254 
6 10.80.0.0 10.95.255.255 10.80.0.1 10.95.255.254 
7 10.96.0.0 10.111.255.255 10.96.0.1 10.111.255.254 
8 10.112.0.0 10.127.255.255 10.112.0.1 10.127.255.254 
9 10.128.0.0 10.143.255.255 10.128.0.1 10.143.255.254 
10 10.144.0.0 10.159.255.255 10.144.0.1 10.159.255.254 
11 10.160.0.0 10.175.255.255 10.160.0.1 10.175.255.254 
12 10.176.0.0 10.191.255.255 10.176.0.1 10.191.255.254 
13 10.192.0.0 10.207.255.255 10.192.0.1 10.207.255.254 
14 10.208.0.0 10.223.255.255 10.208.0.1 10.223.255.254 
15 10.224.0.0 10.239.255.255 10.224.0.1 10.239.255.254 
16 10.240.0.0 10.255.255.255 10.240.0.1 10.255.255.254 

Ahora haremos un subneteo pero de una clase B que sera la 128.0.0.0 tambien con 7 subredes. 
Recordemos ahora la mascara de subred de la clase B: 255.255.0.0 es decir en numero binario seria: 
11111111.11111111.00000000.00000000 

Utilizaremos los numeros que hemos encontrado en el ejemplo anterior para este mismo caso, por lo 
que sabemos que tenemos que tomar 4 bits del octeto , vemos que los 2 primeros octetos estan llenos 
asi que ocuparemos el tercer octeto para trabajar. Por lo que la nueva mascara de subred nos quedaria 
de la siguiente manera. 
11111111.11111111.11110000.00000000 que en numero decimal es 255.255.240.0 

Sabemos que los saltos son de 16 numeros por lo que vimos anteriormente, asi que nuestras subredes 
quedarian de la siguiente manera. 

Numero de Subred Subred Broadcast Rango de IP's Utilizables 
1 128.0.0.0 128.0.15.255 128.0.0.1 128.0.15.254 
2 128.0.16.0 128.0.31.255 128.0.16.1 128.0.31.254 
3 128.0.32.0 128.0.47.255 128.0.32.1 128.0.47.254 
4 128.0.48.0 128.0.63.255 128.0.48.1 128.0.63.254 
5 128.0.64.0 128.0.79.255 128.0.64.1 128.0.79.254 
6 128.0.80.0 128.0.95.255 128.0.80.1 128.0.95.254 
7 128.0.96.0 128.0.111.255 128.0.96.1 128.0.111.254 
8 128.0.112.0 128.0.127.255 128.0.112.1 128.0.127.254 
9 128.0.128.0 128.0.143.255 128.0.128.1 128.0.143.254 
10 128.0.144.0 128.0.159.255 128.0.144.1 128.0.159.254 
11 128.0.160.0 128.0.175.255 128.0.160.1 128.0.175.254 
12 128.0.176.0 128.0.191.255 128.0.176.1 128.0.191.254 
13 128.0.192.0 128.0.207.255 128.0.192.1 128.0.207.254 
14 128.0.208.0 128.0.223.255 128.0.208.1 128.0.223.254 
15 128.0.224.0 128.0.239.255 128.0.224.1 128.0.239.254 
16 128.0.240.0 128.0.255.255 128.0.240.1 128.0.255.254 


Ahora surgen algunas dudas, por que no cambie el “0” que esta despues del 128 , la respuesta es muy 
facil en todas las redes de clase B, en el primer octeto donde podemos tomar prestados bits es en el 
tercero, es decir, los primeros dos octetos permanecen inmutables, por lo que no se puede mover. 
Por ultimo haremos una red de tipo c que sera la 192.1.1.0 tambien con 7 subredes. Ocupamos los 
calculos iniciales y solo tenemos que recordar la mascara de subred de la clase C la cual es 
255.255.255.0 o en numero binario: 
11111111.11111111.11111111.00000000 en el ultimo octeto tomamos los 4 bits, con lo cual la nueva 
mascara de subred quedaria de la siguiente forma: 

11111111.11111111.11111111.11110000 y en numero decimal es 255.255.255.240 , sabemos que los 
saltos son de 16 numeros ahora solo nos resta crear las subredes, con lo que quedaria de la siguiente 
manera. 


Numero de Subred Subred Broadcast Rango de IP's Utilizables 
1 192.1.1.0 192.1.1.15 192.1.1.1 192.1.1.14 
2 192.1.1.16 192.1.1.31 192.1.1.17 192.1.1.30 
3 192.1.1.32 192.1.1.47 192.1.1.33 192.1.1.46 
4 192.1.1.48 192.1.1.63 192.1.1.49 192.1.1.62 
5 192.1.1.64 192.1.1.79 192.1.1.65 192.1.1.78 
6 192.1.1.80 192.1.1.95 192.1.1.81 192.1.1.94 
7 192.1.1.96 192.1.1.111 192.1.1.97 192.1.1.110 
8 192.1.1.112 192.1.1.127 192.1.1.113 192.1.1.126 
9 192.1.1.128 192.1.1.143 192.1.1.129 192.1.1.142 
10 192.1.1.144 192.1.1.159 192.1.1.145 192.1.1.158 
11 192.1.1.160 192.1.1.175 192.1.1.161 192.1.1.174 
12 192.1.1.176 192.1.1.191 192.1.1.177 192.1.1.190 
13 192.1.1.192 192.1.1.207 192.1.1.193 192.1.1.206 
14 192.1.1.208 192.1.1.223 192.1.1.209 192.1.1.222 
15 192.1.1.224 192.1.1.239 192.1.1.225 192.1.1.238 
16 192.1.1.240 192.1.1.255 192.1.1.241 192.1.1.254