Archivos para ‘General’

31 diciembre 2011

Los números de 2011

por auraham

Los duendes de las estadísticas de WordPress.com prepararon un reporte para el año 2011 de este blog.

Aqui es un extracto

Un teleférico de San Francisco puede contener 60 personas. Este blog fue visto por 2.100 veces en 2011. Si el blog fue un teleférico, se necesitarían alrededor de 35 viajes para llevar tantas personas.

Haz click para ver el reporte completo.

17 abril 2011

Sobre archivos temporales, excepciones y SVN

por auraham

Hace un rato me encontré con un problema al tratar de eliminar directorios recursivamente.
Trataba de crear una funcion para borrar los archivos temporales de una aplicación en C#, sin embargo, me generaba una excepción como esta:

System.UnauthorizedAccessException was caught
  Message="Acceso denegado a la ruta de acceso 'all-wcprops'."
  Source="mscorlib"
  StackTrace:
       en System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
       en System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
       en System.IO.Directory.Delete(String path, Boolean recursive)

El error se origina al tratar de eliminar el archivo ‘all-wcprops’. Sin embargo, la aplicación no genera ese archivo. Al buscar qué podría ser, me encontré con muchos resultados que hacían referencia a SVN, Tortoise y temas similares.

El problema fue que intentaba eliminar una carpeta que ‘no debería’. Se trata de .svn la cual se encontraba junto con los archivos temporales.

La solución es evitar eliminarla con una condición y seguir con los demás directorios y archivos. Esta es la función completa

        public void deleteTmp() 
        {
            MainForm.append("Iniciando eliminacion de archivos temporales");

            string filePath = "";
            try
            {

                //Eliminacion de archivos temporales....
                string[] files = Directory.GetFiles(this.system_tmp_dir, "*.*");
                
                foreach (string file in files)
                {
                    filePath = file;
                    File.Delete(file);
                }



                //Eliminacion de directorios temporales...
                string[] dirs = Directory.GetDirectories(this.system_tmp_dir, "*");

                foreach (string directory in dirs) 
                {
                    filePath = directory;

                    //Evita remover el registro svn y mandar una excepcion
                    if(!filePath.Contains(".svn"))
                        Directory.Delete(directory,true);
                }

            }
            catch (Exception e)
            {
                MainForm.append("Error al eliminar el archivo " + filePath  + ": " + e.Message);
            }
        
        }
	

29 enero 2011

Plantillas para uso comercial

por auraham

 

www.styleshout.com

Este sitio provee plantillas bajo Creative Commons. El único requisito es un enlace al sitio.

 

 

27 diciembre 2010

MySQL: grant

por auraham

Para mostrar los permisos actuales de un usuario

SHOW GRANTS FOR 'root'@'localhost';

Para asignar todos los permisos a un usuario sobre todas las tablas de una base de datos

GRANT ALL ON nombre_bd.* TO 'nombre_usuario'@'localhost' IDENTIFIED BY 'password';

30 septiembre 2010

Diccionario español OpenOffice

por auraham

sudo apt-get install myspell-es

25 septiembre 2010

SSH config: Recordando el nombre del servidor

por auraham

Para evitar acceder al servidor de esta manera:

ssh -p 1234 root@192.168.1.65

Podemos crear un archivo de configuración dentro de $HOME/.ssh llamado config para recordar el puerto y el servidor de esta manera:

nano ~/.ssh/config

Escribe lo siguiente:

Host server
HostName 192.168.1.65
Port 1234

Ahora será más sencillo ingresar al servidor:

ssh root@server

Nota: Como te podrás dar cuenta las direcciones IP dentro de nuestra red local (en el caso de que utilices el módem de Telmex, por ejemplo) empiezan con 192.168.1.X, donde X es la variante de cada equipo conectado. Bueno, pues esto quiere decir que nuestra red usa direcciones IP de clase C, es decir, permite crear muchas (pero muchas) redes con pocos host en cada una. Fue lo único que aprendí en mi clase de taller de redes.

Fuente:
Linux Journal

23 septiembre 2010

Midiendo la temperatura de nuestra computadora

por auraham

sudo apt-get install lm-sensors rrdtool

Fuente
lm-sensors project

22 septiembre 2010

CSV & C#

por auraham

using System;
using System.IO;
using System.Collections;
using System.Globalization;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsApplication1
{
    public class excel_n
    {
        static void Main()
        {
            string source = "E:\\archivos\\source.xls";         //debe existir
            string destiny = "E:\\archivos\\destiny.xls";       //debe existir
            string temp = "E:\\archivos\\destiny_temp.xls";
            string filePath = "E:\\archivos\\file.txt";
           


            //copia las celdas
            Console.WriteLine("Copiando...\n");
            copy(source,destiny,temp);

            createFile(filePath);

            //lee las celdas activas y devuelve un arraylist
            Console.WriteLine("Leyendo...");
            getOrderRows(temp,filePath);

            //escribir orden CSV
            //Console.WriteLine("Escribiendo csv");
            //createOrden(records);

            //Listo
            Console.WriteLine("Listo...");
            Console.ReadKey();
            
        }
        
        /*
        | Copia las celdas de la orden a la hoja BASE
        | @param    string  source  Hoja de la orden
        | @param    string  destiny Hoja BASE
        | @param    string  temp    Archivo temporal de destino
        */
        public static void copy(string source,string destiny,string temp)
        {
            //source
            Excel.Application xlAppSource;
            Excel.Workbook xlWorkBookSource;
            Excel.Worksheet xlWorkSheetSource;
            Excel.Range rangeSource;

            //destiny
            Excel.Application xlAppDestiny;
            Excel.Workbook xlWorkBookDestiny;
            Excel.Worksheet xlWorkSheetDestiny;
            Excel.Range rangeDestiny;

            string str;
            int rCnt = 0;
            int cCnt = 0;

            //Apps
            xlAppSource = new Excel.ApplicationClass();
            xlAppDestiny = new Excel.ApplicationClass();
           
            //Source
            xlWorkBookSource = xlAppSource.Workbooks.Open(source, 0, false, 5, null, null, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
            xlWorkSheetSource = (Excel.Worksheet)xlWorkBookSource.Worksheets.get_Item(1);
            rangeSource = xlWorkSheetSource.UsedRange;

            //Destiny
            xlWorkBookDestiny = xlAppDestiny.Workbooks.Open(destiny, 0, false, 5, null, null, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, null, true, false, 0, true, false, false);
            xlWorkSheetDestiny = (Excel.Worksheet)xlWorkBookDestiny.Worksheets.get_Item(1);//hoja BASE
            rangeDestiny = xlWorkSheetDestiny.UsedRange;


            for (rCnt = 1; rCnt <= rangeSource.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= rangeSource.Columns.Count; cCnt++)
                {
                    str = (string)(rangeSource.Cells[rCnt, cCnt] as Excel.Range).Text;
                    //xlWorkSheetDestiny.Cells[rCnt, cCnt] = 10;
                    xlWorkSheetDestiny.Cells[rCnt, cCnt] =  xlWorkSheetSource.Cells[rCnt, cCnt];
                    Console.WriteLine(str);
                }
            }

           
            //Source
            xlWorkBookSource.Close(false,null,null);
            xlAppSource.Quit();

            //Destiny
            xlWorkBookDestiny.Close(true, temp, null);  //guarda destiny con otro nombre
            xlAppDestiny.Quit();


            releaseObject(xlWorkSheetSource);
            releaseObject(xlWorkBookSource);
            releaseObject(xlAppSource);

            releaseObject(xlWorkSheetDestiny);
            releaseObject(xlWorkBookDestiny);
            releaseObject(xlAppDestiny);
        }

        /*
        | Devuelve un arreglo con los valores de las celdas
        | que corresponden a las filas de la orden generada por copy()
        | Se lee a partir del archivo generado en temp
        | @param    string  order   Es el mismo valor que temp en copy()
        | @return   array   values  Los valores de las celdas para generar el CSV
        */
        public static void getOrderRows(string order, string filePath)
        {
            //Abre el archivo en temp y selecciona la hoja 2
            Excel.Application xlApp = new Excel.ApplicationClass();
            Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(order,0,true,5,null,null,false,Excel.XlPlatform.xlWindows,null,true,false,0,true,false,false);
            Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
            Excel.Range range = xlWorkSheet.UsedRange;

            int value = 0;
            string str;
            int num_rows = 1;
            int j=1;

            ArrayList records = new ArrayList();    //guarda todos los registros validos
            string[] record = new string[21];       //guarda un registro valido

            
            //No cuenta los titulos de la columna
            for (num_rows = 2; num_rows <= range.Rows.Count; num_rows++) 
            {
                //value = (int)(range.Cells[num_rows, 7] as Excel.Range).Value2;
                str = (string)(range.Cells[num_rows, 16] as Excel.Range).Text;
                try
                {
                    //ENCUENTRA CEROS
                    //value = int.Parse(str, NumberStyles.Number);
                    value = Convert.ToInt32(str,10);
                    //value = System.Int32.Parse(str);
                    //Console.WriteLine("Success " + value +" en row = "+num_rows);
                }
                catch(System.Exception e){

                    //ENCUENTRA LAS CELDAS Y #¡REF!
                    if (str.CompareTo("#¡REF!") != 0) 
                    {
                        //CELDA ENCONTRADA
                        for (j = 0; j < 21; j++) 
                        {
                            record[j] = "";
                            record[j] = (string)(range.Cells[num_rows, j+1] as Excel.Range).Text;
                            //Console.WriteLine("j = " + j + " - " + record[j] + " \n");
                        }
                        //Console.ReadKey();
                        //records.Add(record);
                        writeOrder(filePath,record);
                    }

                }
                
            }

            xlWorkBook.Close(false, null, null);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

            //return records;
        }

       
        public static void createFile(string filePath)
        {
            TextWriter file = new StreamWriter(filePath);
            file.Close();
        }

        public static void writeOrder(string filePath,string[] values)
        {
            StreamWriter file;
            file = File.AppendText(filePath);

            for (int i = 0; i < values.Length; i++)
            {
                if (i == values.Length - 1)
                {
                    file.Write(values[i]);
                }
                else 
                {
                    file.Write(values[i]+";");
                }



            }
            file.WriteLine("\n");
            file.Close();
        }

        public static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                Console.WriteLine("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }


    }
}

3 julio 2010

Comandos útiles para (casi) todo

por auraham

Me encanta visitar alt1040 y bitelia ya que siempre encuentro cosas interesantes. Desde hace tiempo he estado usando algunos de los comandos que nos recomiendan y para no olvidarlos, pues aquí están mis favoritos.

finch

Se trata del cliente pidgin pero, obviamente, desde la terminal. Algunos atajos son

  • alt+c: Cerrar ventana
  • alt+r: Redimensionar ventana
  • alt+m: Mover ventana
  • alt+p o alt+o: Cambiar de ventana
  • alt+[num]: Cambiar a la ventana [num]
  • alt+a: Ver las acciones

Si ya tienes pidgin, no habrá necesidad de agregar tus cuentas.

htop

Se trata de nuestro top pero con color. Al ejecutarlo en la parte superior aparecen los porcentajes de uso de CPU, memoria y swap. En la parte media aparecen los procesos. En la parte inferior se encuentra el menú de ayuda. Algunos atajos son:

  • espacio: Colorea un proceso de amarillo
  • t: Muestra el árbol de procesos
  • h: Muestra la ayuda

Más info

finch

htop

más

5 mayo 2010

Comandos ssh y scp

por auraham

Conexión

ssh username@servername

Copiar archivos: computadora local – servidor

scp archivo  username@servername:/directory/location/

Copiar archivos: servidor – computadora local

#el . es el directorio actual
scp username@servername:/directory/file   . 
#o también
scp username@servername:/directory/file   new_filename

Copiar archivos: servidor a – servidor b

scp  username@servername_a:/directory/location/file  username@servername_b:/directory/location/

Linux tutorial blog

Seguir

Get every new post delivered to your Inbox.