Entradas

Mostrando entradas de 2009

Como congelar Cerveza Rápidamente

Imagen
Hace tiempo, me llego un correo, y realmente lo encontre util, aqui lo dejo tal cual, :D. a mas de alguien le va a ser util, jejeje. La carne ya está en la parrilla Entonces, llegan los amigos con latas y más latas de cerveza, estúpidamente calientes. ¿Cómo las enfriamos? El profesor Cláudio Furukawa, del Instituto de Física de la Universidad de Sao Paulo lo explica. Ponga el hielo en la hielera.... Agregue 2 litros de agua por cada bolsa de hielo ...agregue medio kilo de sal y medio litro de alcohol El agua aumenta la superfície de contacto, la sal reduce la temperatura de fusión del hielo (tarda más en derretirse) y por una reacción química, el alcohol retira el calor de la mezcla. Algunos llaman a este líquido "mezcla frigorífica" : HIELO, ALCOHOL, SAL y AGUA La mezcla frigorífica es barata y la cerveza queda helada en solo 3 minutos. Y esperar 3 minutos no es ningún sacrifício, ¿verdad? Pase esta información de utilidad pública. -- Atte. Victor Hugo Saavedr

Diagramas Uml de forma facil y bonita

Imagen
Hace un tiempo queria hacer diagramas de forma facil y bonita, estaba haciendo un desarrollo en el que, el resultado era un diagrama de clases, que salia de la lectura de varios Xml's. especificamente de los mapeos de hibernate. buscando, y buscando encontre http://yuml.me/ . una pagina web en la cual puedes hacer diagramas muy bonitos solo escribiendo muy poco. por ejemplo Diagramas de clases: Este diagrama se genera solo con este texto. [Customer]+1->*[Order] [Order]++1-items >*[LineItem] [Order]-0..1>[PaymentMethod] bonito y facil no. aqui esta el generador de diagramas de clases y la documentacion http://yuml.me/diagram/scruffy/activity/draw Diagramas de secuencias o actividad : Este tambien se genera con muy pocas linas. aqui esta como se genera este ejemplo (start)-> logged in->(Show Dashboard)->|a|->(end) not logged in->(Show Login)->|a| Casos de uso : igual que los anteriores, muy facil e intuitivo, aqui el codigo que genera esto. [User]-(Login

como saber quien llama a un metodo con c#

Actualmente tengo un problema en testeo que no tengo en produccion y me vi en la necesidad de hacer una traza de quien llama al metodo, asi que aproveche el impulso e hice un metodo que me muestre todos los metodos que se llamaron. Aqui esta el metodo: using System; using System.Diagnostics; private static string GetCallerName() { var trace = new StackTrace(); var texto = Environment.NewLine; var i = 1; foreach (var stackFrame in trace.GetFrames()){ texto += string.Format("{0}) {1} Of {2} {3}", i, stackFrame.GetMethod().Name, stackFrame.GetMethod().ReflectedType.FullName, Environment.NewLine); i++; } return texto; } y nos retorna algo de de este estilo: 1) GetCallerName Of ZeusNet.Core.Model.Domain.Ops.Laytimes.LaytimeCalculationPortItem 2) set_DemurrageRate Of ZeusNet.Core.Model.Domain.Ops.Laytimes.LaytimeCalculationPortItem 3) _InvokeMethodFast Of System.RuntimeMethodHandle 4) InvokeMethodFast Of System.RuntimeMethodHandle 5) I

Problema de posicionamiento de calendario DHTML con Internet Explorer

Si bien personalmente me da lo mismo  que sea vea bien en internet explorer, los clientes no piensan igual :(. En el proyecto en el cual trabajo en mi trabajo, tenemos el calendario de http://www.dynarch.com/ . y nos encontramos con el problema que en IE, cuando la pagina tiene scroll, no determina bien la posicion. buscando por ahi llegamos a esto. tuvimos que cambiar la forma de leer el scroll. tenia estas lineas, mas menos en la linea 1393 del archivo calendar.js. if (Calendar.is_ie) { br.y += document.body.scrollTop; br.x += document.body.scrollLeft; } else { br.y += window.scrollY; br.x += window.scrollX; } y la dejamos asi ahora. if (Calendar.is_ie) { br.y += window.scrollY; br.x += window.scrollX; } else { br.y += window.scrollY; br.x += window.scrollX; } Claramente es if, no tiene sentido, pero lo deje con unos comentarios en svn, para saber que toque algo ahi en ese codigo :D. -- Atte. Victor Hugo Saavedra http://vhspiceros.blog

Selinium & UpdatePanel[WaitForXXXXXX]

Selenium , es una aplicacion para hacer test automaticos, simula  acciones de usuarios en un navegador. mas adelante me metere mas en lo que es selinum y ventajas de usar una herramienta como esta. Bueno en selenium tenemos varios comandos. por el ejemplo el type, click, typeAndWait, ClickAndWait. bueno la direferencia entre el clickAndWait y click es que el AndWait espera que se recarge la pagina. Pero con los update panels no recarga la pagina completa, entonces no me sirve  un click ni tampoco un clickAndWait. En  Selinium Existe la forma de que quede esperando una accion "WaitForXXXXX" , por ejemplo podemos decirle a selenium que espere a que un elemento este habilidado, esto es super bueno si tenemos peteciones http  asincronicas y despues de esto habilitamos un control.  pero con los updatepanel, no siempre hay una accion visible atravez del un control[amenos que pongamos el tipico div de "Cargando"]. Entonces existe el comando WaitForCondicion, donde uno espe

Post Blog Numero 100 :D

Imagen
Hace mas de 2 años parti con mi blog. aun recuerdo mi primer Post que tiempos aquellos, el objetivo de este blog si bien es personal,  sige teniendo el mismo objetivo, "compartir varias cosas, en especial sobre programacion". por lo generar e posteado cosas mas bien cotidianas. Para sorpresa mia durante todo este tiempo e tenido muchas visitas.  13 seguidores,   y bastantes comentarios, Pretendo seguir adelante con este Blog. tratar de poner mas entradas, siempre sobre cosas que me pasan dia a dia, y como siempre poniendole algo de humor . Como ya dije arriba es un blog personal, pero me sorprende la cantidad de visitas. si bien no me interesa mucho esto,  es rico saber que hay gente lee tu blog, o que al buscar xxxx palabra aparece en Google.  en marzo del 2008 puse Google Analytics. y aqui dejo unas imagenes con la cantidad de visitas. Gracias a los que leen el blog :D. -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Select dinamicos de Pais/Regiones/Ciudad/Comunas con php y javascript

el ejemplo esta aqui siempre se pide en todos lados general select anidados, de que si se seleciona x pais el combo de ciudades tiene que llenarse dependiendo del pais. Aqui hice un ejemplo con php, javascript usando mochikit, y Json . el codigo es totalmente reutilizable, aspectos importantes: - En header.php esta la coneccion a la DB. - Se uso json_encode para formar un arreglo de json por cada fila. esto ya es una funcion nativa en las ultimas versiones de php. - Se generan elementos html dinamicamente con javascript. usando mochikit. - Se conectan con mochkit los select, al momento de hacer onchange, mediante signal. Aqui esta el codigo <?php require_once ("header.php"); $arregloPaises = array(); $arregloRegiones = array(); $arregloCiudades = array(); $arregloComunas = array(); $query_paises = "select idpais as id, descripcion as nombre from paises"; $query_regiones = "select id as id, descripcion as nombre ,idpais

about:mozilla El Libro de Mozilla

Imagen
hace tiempo, encontre por ahi y puse en la barra de direcciones "about:mozilla" al igual que cuando uno pone "about:config" para configurar los paremetros de firefox, y sale lo siguienre aqui dejo Textual lo que aparece en wikipedia con respecto a esta frase: La frase "Mammon se durmió" hace referencia a que MS Internet Explorer se quedó estancada en la versión 6.0 durante 5 años. "la bestia renació" hace referencia a que Netscape renació en la compañía AOL (al menos hasta el 9.0.0.5). "propagándose por toda la tierra y sus seguidores se hicieron legión" a que luego de renacer Netscape, se expandió a todo el globo y sus seguidores se hicieron millones rápidamente. "y proclamaron nuevos tiempos" a que en el futuro los navegadores ya no estarían tan ligados a Internet Explorer, sino que existirían nuevas posibilidades. "sacrificaron cosechas con fuego, con la astucia de zorros" esto hace referencia (directamente

buscando en listas con c#, list.Find o list.FindAll

Tengo en la base de datos todos los feriados, los tengo con año 2000 todos, y en una lista tengo todos los feriados entre en rango de fechas. Tengo una fecha[en realidad varias] y necesito saber si es un dia feriado o no. por que no pregunto a la base de datos, por que estoy en un bucle, y hacer una consulta por cada dia es muy costoso, asi que me traigo los feriados al inicio del proceso con un rago de tiempo. Aai que tuve que usar FindAll de la clase List, y usar delegate para esto. esto me retorna una lista con los objetos que coinciden con la condicion aqui el codigo: var holiday = foo.FindAll( delegate(Holiday hol){ return (hol.Date.Value.Day == newdateTime.Day && hol.Date.Value.Month == newdateTime.Month); }); if (holiday.Count > 0) log.Info(string.Format("{0} es un feriado", newdateTime)); como todos los feriados se guardan en año 2000 y la fechas que estoy generando puede ser de cualquier año, tengo que preguntar por el mes y el dia,

saber dia de la semana en c#

en el trabajo tengo un requerimiento que tiene que desplegar el dia de la semana de x fecha. En .net es super simple solo hay que darle un formato,al metodo tu string tambien acepta una cultura. Aqui algunos ejemplos public String dayOfWeek(DateTime? date){ return date.Value.ToString("ddd"); } esto nos retorna el nombre corto[si lo podemos llamar asi],Wed,sun,etc,etc. Si queremos que nos entrege el nombre completo es cosa de pasarle otro formato al metodo tu string. public String dayOfWeekLarge(DateTime? date){ return date.Value.ToString("dddd"); } Esto nos mostraria por ejemplo Wednesday El el idioma que nos muestre los dias, depende la configuracion regional de nuestros equipos o servidor, si no esta configurado en ninguna parte la configuracion, esto por lo general se configura en el web.config. si queremos asegurarnos por ejemplo que siempre lo muestre en español seria cosa de asignarle la cultura. de la siguiente forma: public String dayOfWeek(D

Gadgets de Twitter donde quieras, incluso en Blogger.

En la mañana si se fijaron agrege un gadget que tiene los ultimos tweet's que he escrito en twitter. esto al lado derecho de la pantalla. no lo hice con el gadget de blogger, si no que lo hice con codigo html y javascript que encontre encontre por ahi. Aqui esta el codigo: <div id="twitter_div"> <ul id="twitter_update_list"></ul> <a href="http://twitter.com/vhspiceros" id="twitter-link" style="display:block;text-align:right;"> follow me on Twitter </a> </div> <script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script> <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/vhspiceros.json?callback=twitterCallback2&count=2"></script> Donde dice vhspiceros tiene que poner su nombre de usuario. esto funciona no solo en blogger, si no que en cualquier pagina. mediante Css

Recuperar clave de usuarios en prestaShop

estoy instanlando prestashop para un trabajo para la universidad. y perdi la clave del administrador. al final instale prestaShop como 3 veces. hasta que encontre una forma de cambiar la clave. Es super facil. Key de la cookie existe un archivo "settings.inc.php" en el directorio "config" en mi caso tiene la siguiente informacion. define('_DB_SERVER_', 'localhost'); define('_DB_TYPE_', 'MySQL'); define('_DB_NAME_', 'prestashop'); define('_DB_USER_', 'root'); define('_DB_PASSWD_', '*****'); define('_DB_PREFIX_', 'ps'); define('__PS_BASE_URI__', '/prestashop/'); define('_THEME_NAME_', 'prestashop'); define('_COOKIE_KEY_', 'Cm8RnxXYYSstej4vivXHmut5zStOXqaasbC48YTm05WKhsQLPIynwTau'); define('_COOKIE_IV_', 'GsDtE6N5'); define('_PS_CREATION_DATE_', '2009-09-06'); define('_PS_VERSION_', 

Les parece familiar???

Imagen
Update gracias a Lester Fibla. -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Volviendo a VIM :D

Imagen
En realidad a Gvim. Hace bastante que no usaba este editor, ya sea en windows o linux. ayer lo instale y me trajo muy buenos recuerdos. Tengo que hacer un proyecto en php[hace mucho que no veia nada en PHP], y se me olvidados varios comandos. Para windows GVim se puede bajar desde aqui Ayer despues de hacer bastante memoria y buscar en varios blogs, volvi a mi configuracion de hace unos años :D. aqui pongo mi _vimrc set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set tabstop=4 set shiftwidth=4 set expandtab set textwidth=8 set autoindent set gfn=Consolas:h8:cANSI colorscheme darkblue set nu set diffexpr=MyDiff() function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2

insert a partir de un select

Necesita poblar una tabla que recien estaba creando, con datos que ya tenia en una tabla. pero no queria darme la lata de llenarla a mano, y recorde que una vez habia hecho esto. pero siempre se me olvida :( El ejemplo mas basico. insert into Country (name) (select 'hola') Y aqui el ejemplo un poco mas completo, insert into pais(name) (select distinct(pais) from persona) Esto se puede hacer con mas campos, lo importante es que coincidan la cantidad y tipos de datos tanto de datos a ingresar como los del select. -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Backup & Restore en sql Server

para hacer los respaldos es relativamente facil, yo lo hago con el siguiente Script ALTER DATABASE testVictor SET SINGLE_USER WITH ROLLBACK IMMEDIATE BACKUP DATABASE testVictor TO DISK = 'c:\testVictor.bak' ALTER DATABASE testVictor SET MULTI_USER nos deja un lindo archivo en c: :D. Restaurar este archivo es un poco mas complicado yo siempre lo hacia de la siguiente forma: USE MASTER; ALTER DATABASE testVictor SET SINGLE_USER WITH ROLLBACK IMMEDIATE; RESTORE DATABASE testVictorFROM DISK='c:\testVictor.bak' WITH REPLACE Esto funciona de perillas, hasta el fin de semana, el viernes me pasaron un respaldo de un servidor y al hacer esto me reclamaba por unas rutas, estos backup tienen asociados archivos tanto de log como de Data. los cuales no los tenia en mi pc. pero esto no es tan terrible hay una forma de ver los arhivos que tiene un archivo.bak. RESTORE FILELISTONLY FROM DISK = 'C:\testVictor.bak' y esto nos retorna lo siguiente: LogicalName Physical

Haciendo respaldos automaticos, parte II

Siguiendo con este post . como no cacho mucho python , ese lo desarrolle en python 2.5, pero un compañero trato de ejecutarlo en 3.1 y no funciono, al perecen en el cambio de versiones cambio la forma de capturar las exepciones. aqui dejo el programa solucionado para la version 3.1. aun no menejo las excepciones solo muestro un texto "Error Controlado" :( . import os import shutil import datetime date = datetime.date.today() dateDelete = date - datetime.timedelta(weeks=2) sourcePath = r'F:\develop\zeus\trunk' destRootPath = r'U:\respaldoAutomaticos' destPath = destRootPath + "\\" + str(date) + " _respaldo" print ("find old Directories") try: print (dateDelete) for directory in os.listdir(destRootPath): try: array = directory.split(" ")[0].split("-") dateDir = datetime.date(int(array[0]), int(array[1]), int(array[2])) print (dateDir) if dateDir <

Enviando correo con c# y gmail

Estuve tratando de enviar correos desde c#, es bastante facil, con el framework 3.x. en los frameworks anteriores es muy parecido, solo cambian algunos metodos, por ejemplo el TO es un string donde separamos por coma los destinatarios, en el 3 es una lista. pero no hay mucha diferencias significativas entre un framework y otro. public void sendMail{ var msg = new MailMessage(); msg.To.Add("vhspiceros@gmail.com"); msg.From = new MailAddress("vhspiceros@gmail.com", "victor hugo Saavedra", Encoding.UTF8); msg.Subject = "Prueba de correo a GMail"; msg.SubjectEncoding = Encoding.UTF8; msg.Body = "Cuerpo del mensaje"; msg.BodyEncoding = Encoding.UTF8; msg.IsBodyHtml = false; msg.Attachments.Add(new Attachment(@"c:\foo.txt")); var client = new SmtpClient{ Credentials = new NetworkCredential("vhspiceros@gmail.com", "******"), Port = 587, Host = "s

Gandalf??

Imagen
Hace mucho que no posteo, he estado vuelto loco con la universidad, tratando de salvar todos los ramos, y recuperar los atrasados, para lograr salir este año de la universidad :). Aquí dejo una foto, que encontré por ahi, esta genial, todavía me rió :D. -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Haciendo respaldos automaticos

Buscando y buscando no entre ningun programa que pudiera generar respaldos automaticos en windows. en linux con la linea de comando seria bastante sencillo hacerlo. Asi que me aburri de buscar y empeze a buscar y desarrollar en python, el resultado de esto fue bastante bueno. Aqui dejo el codigo import os import shutil import datetime date = datetime.date.today() dateDelete = date - datetime.timedelta(weeks=4) sourcePath = r'F:\develop\trunk' destRootPath = r'U:\respaldoAutomaticos' destPath = destRootPath + "\\" + str(date) + " _respaldo" print ("find old Directories") try: for directory in os.listdir(destRootPath): try: array = directory.split(" ")[0].split("-") dateDir = datetime.date(int(array[0]), int(array[1]), int(array[2])) if dateDir < dateDelete: print ("try drop Directory" + destRootPath + "\\" + directory) shutil.

Haciendo Drag & Drop con Mochikit

Hacer drag & drop con mochikit , es relativamente facil. Hace unos dias hice un ejemplo bastante sencillo. y con pocas lineas de javascript podia hacer que se arastratan unos divs o lo que sean hacia otro div. El planteamiento para hacer esto es, hay que crear uno o mas elementos Draggable , y por otra parte crear elementos Droppable aqui definimos todos los elementos que puede permitir tener esta seccion[esta discriminacion la hace por la clase CSS asignada]. Y despues simplemente lo conectamos, nuestras funciones para que cree los elementos al cargar la pagina, en mochikit esto se hace con addLoadEvent . Aqui dejo el codigo, el codigo casi habla por si solo. addLoadEvent(function (){ createDrag(); createDrop(); }); function createDrag(){ var arreglo = getElementsByTagAndClassName(null,"draggable"); for (var i = 0;i < arreglo.length;i++){ new Draggable(arreglo[i],{revert:true, handle: false, starteffect: MochiKit.Visual.Opacity,

Cambio en la encuesta II

La encuesta anterior ¿En que Lenguaje te gusta mas programar? , con un total de 178 votos se redistrubuyeron de la siguiente forma C# 90 (50%) Java 56 (31%) Javascript 36 (20%) C/C++ 23 (12%) Vbscript 17 ( 9%) Python 11 ( 6%) Pascal 10 ( 5%) Cobol 10 ( 5%) Ruby 9 ( 5%) Y ahora nueva encuesta como es costumbre, ¿Que prefieres Escuchar mientras Trabajas? -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Doblandole la mano a los updatePanels de AjaxcontrolToolkit y javascript

Tenia que hacer que un texbox de .net se vieran y escribieran con mayuscula. Hasta ningun problema, con css se puede hacer sin problema, y al momento de guardar en la DB hago un Uppercase, y estoy listo dije yo. Hice una pequeña funcion , en javascript que lo hiciera, por que no eran textbox nativos ni de html ni de webform, eran de webform ya extendidos. function changeUpperCaseCss(){ var textBox= $('<%=txtNombre.ClientID %>'); textBox.style.textTransform = 'uppercase'; } listo, ahora solo me quedaba conectar el elemento en el onload, de la siguiente forma con mochikit. addLoadEvent( function (){ changeUpperCaseCss(); } ); Funcionaba todo de maravilla, pero el problema el maldito updatePanel, cada vez que se refrescaba el panel, se perdia o refrescaba el texbox, entonces perdia la propiedad textTransform que le habia puesto con javascript. para solucionar

Ordenando por fechas en c# :D

Siguiendo con este post . Aqui Ordenamos una lista de objetos por fecha. la gran diferencia que solo usamos DateTime.Compare . Este lo ordena de forma acendente. var personas = getAllPersonas(); personas.Sort(new Comparison ( delegate(persona a, persona b) { return DateTime.Compare((DateTime)a.fechaNac, (DateTime)b.fechaNac); })); Si lo queremos ordenar de forma descendente simplemente cambiamos el orden de comparacion :D de esta forma. var personas = getAllPersonas(); personas.Sort(new Comparison ( delegate(persona a, persona b) { return DateTime.Compare((DateTime)b.fechaNac, (DateTime)a.fechaNac); })); -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

problemas con Identity al insertar datos

Hoy tuve un problema, tenia que traerme unos datos de una base de datos. hasta ahi nungun problema, genere el script con el Aqua data Studio y se veia todo bien. pero cuando trate de insertarlo en otra base de datos me reclamo por el indentity. y claro los insert exportados traian el id por cada fila. Entonces averiguando por ahi, ese identity se puede desactivar de la siguiente forma: SET IDENTITY_INSERT [dbo].[PERSON] ON GO INSERT INTO [dbo].[PERSON]([Id], [CreateDate]) VALUES(1, '20090428 17:01:00') GO SET IDENTITY_INSERT [dbo].[PERSON] OFF GO y listo el insert se ejecuto correctamente. lo que si me llama la atencion que a simple vista el ON y el OFF estan al revez, pero estan bien. mi sentido comun dice que deberia ser alrevez pero bueno. Esto es para Sql Server -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Problema de Fisolofos, comunicacion entre procesos

Imagen
En mi Clase de sistema operativo, nos dieron una tarea, es el tipico ejemplo de los filosofos, donde hay 5 filosofos, y solamante 4 tenedores. la idea es optimizar la comunicacion entre los procesos y optimizalos. Cada filoso puede comer siempre y cuando tenga 2 tenedores asi que por logica, como maximo pueden haber 2 filosos comiendo, y el resto pensando, meditando o espera, como quieran llamarle. Aqui hay ejemplo en C, que encontramos muy bueno. #include <pthread.h> #include <semaphore.h> #include <stdio.h> #define N 5 /*num. de filosofos*/ #define IZQ (i-1)%N /*vecino izquierdo de i*/ #define DER (i+1)%N /*vecino derecho de i*/ #define PENSANDO 0 #define CON_HAMBRE 1 #define COME 2 pthread_t filos[N]; /*hilos que representan a los filósofos*/ sem_t mutex ; /*semáforo para la sección crítica*/ sem_t s[N]; /*semáforos para los filósofos*/ int estado [N] ; /*estado actual de cada filósosfo*/ /* el filos

buscar textos en procemientos almacenados.

hace unos dias, vi aun compañero de trabajo buscar texto en los procedimientos almacenados. que es bastante util, cuando queremos ver cuando se hace un insert a una tabla o cosas por el estilo. select SUBSTRING(text,0,40) from syscomments where text like '%textoABuscar%' Remplazen el "textoABuscar" por lo que quieran buscar. esto es para Sql Server -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Backups automáticos en SQL Server 2005

hoy estuve con Paul, un compañero de trabajo cuestienandonos la mejor forma de hacer respaldos en Sql Server de forma Automatica. primero hay que generar un script al cual llamaremos backup.sql y lo crearemos en c:\ DECLARE @fecha VARCHAR(50) DECLARE @archivo VARCHAR(50) SET @fecha = CONVERT(VARCHAR(4), YEAR(GETDATE()))+'-'+ CONVERT(VARCHAR(2), MONTH(GETDATE()))+'-'+CONVERT(VARCHAR(2), DAY(GETDATE())) SET @archivo = 'C:\tmp\BD_'+ @fecha +'.bak' ALTER DATABASE BD SET SINGLE_USER WITH ROLLBACK IMMEDIATE BACKUP DATABASE BD TO DISK = @archivo ALTER DATABASE BD SET MULTI_USER GO EXIT Ojo en hay que Cambiar DB por el nombre de la base de datos. Ademas este script cambia la Db a "MULTI USER". luego crearemos backup.bat, con el siguiente contenido SQLCMD -S(local)\SQLEXPRESS -E -i"C:\backup.sql" "C:\Archivos de programa\WinRAR\rar" a BACKUP.rar c:\TMP\*.* ECHO S | DEL c:\TMP Utilizamos la utilidad SQLCMD para que ejecute en backup.

Svn Diff View mi primer proyecto openSource :) .

Imagen
Svndiffview es una aplicacion bastanta pequeña, pero con una utilidad bien especifica. Svndiffview es un site que sirve para ver las diferencias entre una revision contra la revision anterior. su uso es muy simple. Ademas las diferencias entre archivos las muestra de forma bastante intuitiva y amistosa. Se hizo en python, con pySvn. esta bajo Django. Ademas por costumbre se uso mochikit para js, ya que es una libreria muy poderosa. Aqui ahi mas info de la aplicacion http://code.google.com/p/svndiffview/ Use como base para este desarrollo, un proyecto open source llamado codeflow , desarrollado por Leo Soto . Bueno aqui les dejo unas capturas de la aplicacion. -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Un proyecto no solo es programar[Herramientas de apoyo]

Muchas veces un proyecto se complica o facilita independiente de que el equipo tenga un nivel tecnico alto. Para facilitar cosas Anexas al desarrollo existen varias herramientas de automatizacion y de apoyo, la mayoria son openSource,Free o como quieran llamarles. Aqui detallo algunas que por lo menos para mi son fundamentales, a lo mejor voy a estar muy orienta a .net. Sistema de control de versiones: Hay muchos cvs, ,Svn, soursafe, etc. pero el que mas sobresale es Svn. la gracia de usar Svn serian Codigo respaldado. Posibilidad de trabajar en equipo. Posibilidad de tener acceso a todo el historial de cambios, por archivo o proyecto completo. poder volver atras en cambios que pudiesen estar malos. Para mi ya seria muy complicado trabajar sin svn, o algun sistemas de estos, mas cuando trabajas en equipo.[aun recuerdo mi primer trabajo donde no existia nada de eso, y se me perdian a menudo los fuentes :)]. Esto no importa en el lenguaje que trabajes solo almacena historial

mi primer sort con un Delegate :)

Alguna vez hace mucho tube que ordenar, pero lo hice de una forma muy poco eficiente. Actualmente estoy con c# framework 2. La forma de ordenar es super simple aqui Dejo un ejemplo: list.Sort( delegate(Persona foo, Persona bar){ return foo.Edad.CompareTo(bar.edad); }); Para el framework 3 podemos usar expresines lambda de esta forma. list.Sort( (foo, bar) => foo.Edad.CompareTo(bar.Edad)); -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com

Object initializer in C#??

Muchas veces en c# eh visto y realizado codigo como este Persona persona1= new Persona(); persona1.nombre = "Victor Hugo Saavedra"; persona1.edad = 25; En c# hay una forma de inicializar los objectos con sus propiedades, aunque no hallamos definido un costructor. Aqui dejo un ejemplo Persona persona1= new Persona { nombre= "victor Hugo Saavedra", edad = 25, }; El ejemplo habla por si solo, Encuentro que ve mucho mas elegente y legible. de hecho Resharper no sugiere utilizarlo de esta forma. Esto mismo podemos hacerlo con nuestas famosas y queridas Hashtable de la siguiente forma: Hashtable ht = new Hashtable { {"nombre", "aqui va el nombre"}, {"edad", 22}, }; -- Atte. Victor Hugo Saavedra http://vhspiceros.blogspot.com