viernes, 2 de diciembre de 2011

Buscando resources incluidos en un proyecto

Hoy me pidieron ayuda y para variar no pude ayudar, la cosa es que necesitaba encontrar un archivo incluido en un proyecto, pero incluido como "embedded resource" en un proyecto de tipo Winform, pero no sabia con el nombre que lo dejaba al momento de copilar. Después de buscar en google encontré un script para ver todos los resources incluidos en el proyecto donde indica el nombre que quedan al momento de compilar.
System.Reflection.Assembly thisExe; 
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
string [] resources = thisExe.GetManifestResourceNames();
string list = "";

// pasando a un string la lista de recursos
foreach (string resource in resources)
   list += resource + "\r\n";

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 22 de noviembre de 2011

Orientación y cumplimientos de objetivos

Es comun ver en los ofertas de trabajo el item de "Orientacion y cumplimiento de objetivos", si bien para mucho este item es solo sentido común "Como no voy a cumplir mis objetivos, si me dan todas las herramientas para hacerlo", para otras personas no es tan así.

En los años que llevo trabajando que no son pocos pero tampoco demasiados, he visto en bastantes personas con problemas la orientación de objetivos o tareas.

Un ejemplo, si me pidieran un requerimiento que simplemente sume 2 números, yo lo primero que haria es hacer un método que sume 2 números independiente si esos 2 números vienen de una base de datos, webservices, archivo de textos, variables de session o de aplicacion, y después de hacer la pieza de código que me pidieron hacer y ver que esta funcionando correctamente me dedico a ver que valores enviarle a mi código. para mi eso es sentido común (a lo mejor estoy equivocado), pero me encontrado que para hacer algo tan simple, se dan vueltas por base de datos, por webservices, buscando frameworks de ultima tecnología para simplemente para sumar 2 números. Ojo que hay casos que la investigación si sirve y de mucho.

Otra caso por ejemplo,  una vez pregunte a varios personas ¿Como puedo hacer para manejar las transacciones con .net y Sql server, cosa de que si hay un error, poder hacer un rollback(son varios insert a varias tablas)? y me lleve muchas sorpresas, uno me dijo haz un procedimiento almacenado que reciba todos los parámetros y manejas la transacción en el procedimiento almacenado). Personalmente lo encontré una locura, tener un procedimiento con demasiado parametros ya que debería insertar en varias tablas. Al final en .net el objecto de conexión tiene un transaction al cual le puedo decir que haga un rollback si ocurre una exception, en una sola linea. (igual esto me pasa por andar preguntando cuestiones antes de buscar en google).

También me he encontrado gente que cuando uno le hace una pregunta bien super especifica y se dan vueltas como si estuvieran cuentiando, y cosas no solo de informática. como por ejemplo para una pregunta muy simple como: ¿hace calor afuera?, uno esperaría como 3 opciones de respuesta:

  • Si
  • no
  • un poco, no mucho, etc.
, pero si te dicen depende que tan calenturiento bueno para el calor eres, WTF  si uno pregunta algo especifico y alguien especifico es para que me diga respecto a el, su percepción, su parecer, su opinión, no con respecto a mi o a todo el mundo. 

Por ultimo, si bien me encontrado con gente como la de mas arriba, la mayoría de la gente con la que he trabajo no tiene ese problema, muy por el contrario sabe muy bien cumplir objetivos, sabe lo que tiene que hacer para que las cosas funcionen, tienen opinión sobre los temas que se puedan tratar, etc.





--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 17 de octubre de 2011

Generando datos de prueba de forma automatica

Por fin encontré con el sitio que andaba buscando hace mucho, siempre he tenido problemas para generar información de prueba simulada,  hoy en mi ratos de ocio investacion di con http://www.generatedata.com/, un sitio que permite generar datos de pruebas,  con la capasidad de entregar como resultado:
  • SQL: Generación de la tabla  e insert tanto para Mysql como para oracle.
  • HTML
  • EXCEL
  • SQL
  • XML


Como pueden ver la interfaz es bastante intuitiva, yo para una prueba probe con mysql y 2 campos(como se ve en la imagen y el resultado fue el siguiente:

CREATE TABLE personas (
  `id` mediumint(8) unsigned NOT NULL auto_increment, 
  `nombre` varchar(255) default NULL,
  `Email` varchar(255) default NULL,
  PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1; 


INSERT INTO `personas` (`nombre`,`Email`) VALUES ('Noah','Quisque.nonummy@arcuSed.org');
INSERT INTO `personas` (`nombre`,`Email`) VALUES ('Avram','euismod@nibhPhasellus.org');
INSERT INTO `personas` (`nombre`,`Email`) VALUES ('Kibo','Fusce.dolor@erat.org');
INSERT INTO `personas` (`nombre`,`Email`) VALUES ('Kareem','Aenean@Nullam.ca');
INSERT INTO `personas` (`nombre`,`Email`) VALUES ('Yardley','mi@maurisrhoncusid.ca');


Esta realmente muy útil este sitio.





--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

Bienvenido Grand Nomade 2012

Después de haber tenido bastante problemas  con el auto anterior, decidí comprar un auto cero kilometros, es la primera vez que manejo  un auto 0 KM, y la sensación es increíble, cero ruidos, saber que auto no va a tener  problemas en un largo tiempo, es genial.

Con respecto al equipamiento, si bien no es el top de linea, yo lo encuentro genial, aquí algunas cosas de las que me llaman la atención:

  • Motor: 2,4 con VVT, mi Grand Nomade anterior era 2.0 y sin VVT, y se siente bastante la diferencia.
  • Transmicion: Manual al igual que el otro.
  • Traccion: 4x2, el anterior era 4x4 y lo use solamente 2 veces y solo para probar
  • LLantas: llantas de aleacion aro 17
  • Inmovilizador: No es de fabrica, pero se lo intalaron gratis en derco, es para que no se roben el auto, cada vez que parto tengo que poner una clave, sin esa clave el auto no parte. 
  • Aire Acondicionado con Climatizador automatico: es aire acondicionado pero uno indica la temperatura que uno desea, y el auto solo sabe la cantidad y nivel de temperatura del aire. muy bueno :D.
  • Neblineros: Alumbran ene, en el anterior no tenia.
  • Radio con entrada aux: Radio con mp3 y con salida auxiliar frontal, las versiones anteriores no tenían  entrada auxiliar y ponérsela era carisimo.
  • Airbag: Solamente 2 frontales.
  • Computador abordo: Indica el consumo promedio, cuantos kilómetros puedo andar con la bencina que queda en el estanque.
  • Consumo: Lo probé en 2 fin de semana,  y en carretera me llego a dar 14 km por litro andando entre 80 y 100 KM, y a 120 KM me da 12 KMxL, lo cual no lo encuentro para nada un consumo exagerado. 
como resumen, estoy realmente contentisimo con la compra, aquí dejo algunas fotitos :D

















--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 8 de agosto de 2011

incendio en la esquina de mi casa

Para los que no vieron las noticias , ayer la esquina de maipu con rosas se produjo una fuga de gas y con esto un incendio, el cual duro aproximadamente 6 horas, ya que los bomberos no tenian que apagar el fuego para avitar una explosion, solo debian controlarlo.


MetroGas al rededor de las 15 horas corto el suministro de gas para que los bomberos pudieran apagar el incendio.

Lo importante es que no hubo ninguna victima de ningun tipo.

Aqui unas fotos, las primeras son las publicados en la radio bio bio, (ver noticia)






Ahora mis fotos tomadas desde el celular,










ahora las fotos del día después de la fuga de gas.






--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 5 de julio de 2011

OPENQUERY -- OLE DB provider 'SQLOLEDB' supplied inconsistent metadata for a column.

Desde hace un tiempo que tengo 2 servidores Sql Server likeados, es bastante util y comodo, ya que simplemente hacia las consultas al otro servidor de la siguiente forma:


SELECT * FROM LinkedServerName.SchemaName.dbo.TableName


Pero de un momento a otro al consultar una tabla me daba el siguiente error


OLE DB provider 'SQLOLEDB' supplied inconsistent metadata for a column. Metadata information was changed at execution time.


Tenia el presentimiento de que habian cambiado algun tipo de dato o algo en el servidor enlazado (LinkedServerName).

Averiguando por ahi, encontre que se podia ver especificamente cual era la columna que tenia el problema, esto se hace habilitando la transaccion 7300, de la siguiente forma:


DBCC TRACEON (7300)
SELECT * FROM LinkedServerName.SchemaName.dbo.TableName
DBCC TRACEOFF (7300)


Esto da un error, harto mas conocido, como el que me arrojo a mi:
OLE DB error trace [Non-interface error: Column 'PLCur' (compile-time ordinal 16) of object ........., pero un sigue siendo chino para mi, pero al menos sabia que era un problema con la columna "PLCur".

Despues de seguir buscando y buscando, encontre una sentencia para realizar querys de forma distribuida, la cual recomienda de Microsoft, esta es openQuery;


SELECT * from OPENQUERY(LinkedServerName, 'SELECT * FROM SchemaName.dbo.TableName')


De esta forma, ya no tengo mas el maldito problema, pero la gran diferencia que hay en hacer consultas directas y con Openquery, es que OpenQuery ejecuta la consulta en el servidor linkeado y solo retorna el resultado, Por otra parte las consultas directas retornan toda la informacion, y el procesamiento se ejecuta de forma local.






--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 29 de junio de 2011

Resetear clave de usuarios de mediaWiki

Cuantas veces no les ha pasado que olvidan la clave de mediawiki, bueno a mi me pasa muy seguido, aunque no tanto como a mis compañeros de trabajos.

Aquí un simple sql(mysql) para poder cambiar el password por base de datos



UPDATE user SET user_password = MD5(CONCAT(user_id, '-', MD5('NEWPASS')))
WHERE user_id =1

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 8 de junio de 2011

Vista para mobiles de blogger

hoy me sorprendido al ver la configuracion de blogger, ahora existe la opcion de configurar un template para la vista desde mobiles, ahora solo se puede activar o desactivar esta opcion, este template no es configurable todavia.

aqui una imagen de como se ve este blog en mi iphone:




Lee este post en Ingles

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 7 de junio de 2011

Comida Peruda

Yo y mi señora somos fanaticos de la comida peruana, para mi y mucha gente esta es una de las mejoras cocinas del mundo(aunque yo no conozco mucho de comidas)

ayercon mi señora fuismos a comer al "aji seco", ubicado en San Pablo #2596,Santiago.

Bueno , las fotos a continuación

Antes





Despues






Lee este post en ingles
--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 6 de junio de 2011

buscando autos con python y chileautos

Un compañero de trabajo paul beltran anda en busqueda de un toyota yaris, pero como muchos saben este es un auto muy cotizado, y cuando llega a llamar ya el auto se vendio.

Yo le dije que usara buskautos , ya que ellos por cada publicacion de autos, envian un tweet a todos sus seguidores en twitter.

Por ultimo me parecio bastante interesante, tratar de hacer una aplicacion que busque autos en la pagina de chileautos y encontrar las publicaciones nuevas. esto se puede hacer, por que los parametros de busqueda en su sitio son pasados por las urls.

Bueno aqui el buscador.



##
## python buscador.py
##
import urllib, os, re, getpass, smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE
import os.path


current_path = "D:\\buscardorDeAutos\\yaris"
xml_dir = current_path + "\\xmlFiles\\"
URL = "http://www2.chileautos.cl/cemagic.asp?pag=1&dea=50&sort=vcrec&ciudad=37&tipo=TODOS&modelo=yaris&ai=1928&af=2011&pi=4000000&pf=5000000&disp=1&formulario=Busqueda_Avanzada";

mail_to = ['vhspiceros@gmail.com','paulbeltran@gmail.com']
mail_subject = '[toyota Yaris] Nueva publicacion en chileautos!!'

def create_ditectory():
if os.path.isdir(xml_dir) == False:
os.mkdir(xml_dir)

def save_url(filename):
os.chdir(xml_dir)
dirs = os.listdir(xml_dir)
urllib.urlretrieve(URL,filename)

def get_content_file(filename):
try:
f = open(filename, "r")
content = f.read()
f.close()
return content
except:
return ""

def filter_content(filename):
content = get_content_file(filename)

beginWord = "<table align='center' border=1 class=\"tbl_Principal\">"
endWord = "<div class='prevnextlinks'>"

content = content[content.find(beginWord):len(content)] ##sacamos el inicio del documento
content = content[0:content.find(endWord)]
return content

def save_file(filename,content):
f = open(filename, "w")
f.write(content)
f.close()

def path_Filename():
dirs = os.listdir(xml_dir)
return xml_dir + str(len(dirs))+'.html'

def path_previus_Filename():
dirs = os.listdir(xml_dir)
return xml_dir + str(len(dirs)-1)+'.html'

def get_id_cars(content):
# TODO: hacer que traiga el precio, para ver variaciones de precio.
return re.findall("codauto\x3D([0-9]*)",content)

def get_diferences(previus,actual):
dif = []
for x in actual:
if x not in previus:
dif.append(x)
return dif

def send_mail(diff):
sender = smtplib.SMTP('smtp.gmail.com')
sender.ehlo()
sender.starttls()
usuario_gmail = 'vhspiceros'
sender.login(usuario_gmail, "******")

msg = MIMEMultipart()
msg['Subject'] = mail_subject
msg['From'] = "vhspiceros@gmail.com"
msg['To'] = COMMASPACE.join(mail_to)


list = ["http://www3.chileautos.cl/auto.asp?codauto=" + x for x in diff]
body = "< br />".join(list)


part1 = MIMEText(body, 'html')
msg.attach(part1)

sender.sendmail(msg['From'], msg['To'],msg.as_string() )
sender.close()


def main():
create_ditectory()
filename = path_Filename()
previus_Filename = path_previus_Filename()
save_url(filename)
content = filter_content(filename)
save_file(filename,content)

previus_content = get_content_file(previus_Filename);

previues_cars = get_id_cars(previus_content)
actual_cars = get_id_cars(content)

dif = get_diferences(previues_cars,actual_cars)
if len(dif) > 0:
send_mail(dif)

if __name__ == "__main__":
main()



A esta aplicacion se le pueden hacer mejoras obviamente, pero ya envia por correo con los links de las nuevas publicaciones, en el futuro se podria hacer que detecte los aumentos o disminuciones de precios.


Ya terminado este desarrollo, que es bastante ocioso la vedad, ahora solo me queda configurarlo en el "programador de tareas" de windows para que se ejecute unas 2 veces al dia :D.


Ahora mi amigo paul, podrá ser uno de los primeros en enterarse cuando se publique un nuevo auto :D.






--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

viernes, 27 de mayo de 2011

Importando librerias de .net en Ironpython

IronPython es python corriendo sobre .net, como tambien existe Jython
que es sobre la jvm. La gracia de estas estos es usar toda la
comodidad de un lenguaje extremadamente simple de escribir, leer y
usar las librerias de .net o java por ejemplo.

Para utilizar las librerias de .net primero se debe importar Common
Language Runtime
, y luego importar la libreria de .net que queramos
usar. Por ejemplo para realizar unas consultas la base de datos y
recorrer el resultado seria tan simplo como



import clr
clr.AddReference('System.Data')
from System.Data import
connection = SqlClient.SqlConnection("server=localhost,1433;uid=myuser;pwd=mypass;database=mydatabase;")
query ="select * from person";
command = connection.CreateCommand()
command.Connection = connection
command.CommandText = query
command.CommandType = CommandType.Text
connection.Open()
reader = command.ExecuteReader()
while reader.Read():
print (reader["name"])
reader.Close()
connection.Close()


--
Atte.
Víctor Hugo Saavedra P.
http://vhspiceros.blogspot.com

jueves, 26 de mayo de 2011

Caso practico por que usar una Interfaz

a causa del post anterior Cannot serialize member 'Objects' of type 'System.Collections.Generic.IList`1.... varios me preguntaron por que usar Ilist y no List directamente.


Bueno aquí un pequeño y muy cotidiano ejemplo, que sirve para entender las gracias de las interfaces.


Supongamos que tenemos 2 clases una llamada "auto" y otra "camion" y ambas tienen un numero de patente. y en algún reporte o pantalla solo tenemos que listar solo la Patente seria de la siguiente forma.


public interface IPatentable {
String Patente { set; get; }
}

public class Auto:IPatentable {
public String Patente { set; get; }
public Int32 CantidadDePuertas { set; get; }
}

public class Camion:IPatentable {
public String Patente { set; get; }
public Int64 Peso { set; get; }
}


y después en un objeto Dao, para rescatar los datos desde algún origen, ya sea base de datos, webservice, etc.:


public IList<IPatentable> GetPAtentes() {
var auto1 = new Auto { Patente = "yk99998", CantidadDePuertas = 5 };
var auto2 = new Auto { Patente = "cd1543", CantidadDePuertas = 3 };

var camion1 = new Camion() { Patente = "AD7777", Peso = 5000 };
var lista = new List<IPatentable>();
lista.Add(auto1);
lista.Add(auto2);
lista.Add(camion1);

return lista;
}



y por ultimo simplemente lo llamamos y nos retornara una lista de Ipatentable, el cual puede contener cualquier objeto que implemente esta interfaz.

de la siguiente forma:


var listPatentes = new patenteDAo().GetPAtentes();
foreach (var foo in listPatentes)
Console.Write(foo.Patente);



En resumen una interfaz es un como un contrato, en este ejemplo no nos importa si el objeto es un cambion o auto, solo nos interesa que tenga una patente y para eso los objetos deben implementar esta interfaz.


Para este ejemplo igual se pueden usar herencia , con una clase Abtracta por ejemplo

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 25 de mayo de 2011

Cannot serialize member 'Objects' of type 'System.Collections.Generic.IList`1....

Hoy me he encontrado con este problema, trantado de serializar un objeto a xml, por alguna razón no se pueden serializar objetos que contengan atributos Ilist.

La foma de la que estaba trantando es la siguiente


[Serializable]
public class Person{
public Person (){
Address = new list<Address>();
}
public String Name{set;get;}

public IList<Address> Address {set;get;}

public void ToXml() {
var serializer = new XmlSerializer(typeof(Voucher));
var writer = new XmlTextWriter(Console.Out);
serializer.Serialize(writer, this);
}
}




y obviamente ejecuto esto desde un test unitario como el que sigue:


[Test]
public void TestForPersonToXml() {
var person = new person();
Person.NAme = "victor Hugo Saavedra";
var Add = new Address();
add.street = "Alameda";
add.number = "1234";
Person.Address.add(add)

person.ToXml();
}


Pero al momento de ejecutar el test me da el siguiente error "Cannot serialize member 'Person' of type 'System.Collections.Generic.IList`1....." para lograr que la serializacion no se este error, tuve simplemente ignorar la propiedad que contiene el Ilist y generar otra que retorne una arreglo de direcciones quedando de la siguiente forma:


[Serializable]
public class Person{
public Person (){
Address = new List<Adress>();
}
public String Name{set;get;}

[XmlIgnore]
public IList<Adress> Address {set;get;}


[XmlArray("Address"), XmlArrayItem("address")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
private Address[] AddressXml{
get{
var foo = Address as List<Address>;
return foo != null ? foo.ToArray() : null;
}
set{
Address = null == value ? null : new List<Address>(value);
}
}

public void ToXml() {
var serializer = new XmlSerializer(typeof(Voucher));
var writer = new XmlTextWriter(Console.Out);
serializer.Serialize(writer, this);
}
}



Notar que el resultado de la serializacion es enviada a la salida de la consola y no se realiza ningún trabajo con ella.

Otro aspecto importante es que la clase Address debe contener el atributo [Serializable]

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 24 de mayo de 2011

Usa protector solar HQ

Sin duda este es uno de los mejores vídeos que he visto, este tambien lo pueden encontrar en aqui





Otro vídeo que también me gusta mucho, pero no se si para verlo todos los dias, pero si de vez en cuando es "THE MOST"

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 23 de mayo de 2011

Mis nuevos avatar

Mis nuevas imagenes, tanto para twitter google talk. las cuales las genere conhttp://www.pocoyize.com/online/ pero la version para iphone












--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

miércoles, 4 de mayo de 2011

Mi auto

Hace ya mas de un año que me compre un auto, un grand nomade 2007, y no habia tenido la oportunidad de poner fotos de el aqui... sin mas que comentar aqui van las fotos












--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

lunes, 2 de mayo de 2011

DbAdapter Timeout

Hace un tiempo tuve que implementar un desarrollo en particular, que hoy en dia se esta dejando de funcionar por un maldito timeOut, ya que este se conecta a una base de datos que se encuentra en Europa.

Ademas se debe usar una conexión "SQLOLEDB" si es en produccion ya que el servidor es muy antiguo.


primero implemente una regla no muy bonita pero funciona de maravilla.


public static DbDataAdapter GetDataAdapter(string query, String connectionString) {
if (connectionString.Contains("SQLOLEDB"))
return new OleDbDataAdapter(query, connectionString);
return new SqlDataAdapter(query, connectionString);
}


De esta forma se puede determinar si crear un SqlDataAdapter o un OLEDBadapter.

¿por que adapter y no comandos y conexiones?
principalmente como es un servidor remoto, el adapter solito maneja la conexión y nos permite pasar a un dataset. La implementacion seria :


var adapter = ConnectionStringClass.GetDataAdapter("select * from foo", ConnectionStrinString);
adapter.Fill(ds);
var total = ds.Tables[0].Rows.Count;
Log.Info("cantidad de registros -->" + total);
var reader = ds.CreateDataReader();


pero esto no es muy mágico, ahora cada dia es mas recurrente ver en los logs, de log4net caidas por timeout, Yo ya me estaba resignando a no usar dataset para despues crear un dataReader, peo pero el que busca siempre encuentra :D. la forma es muy simple.


var adapter = ConnectionStringClass.GetDataAdapter("select * from foo", ConnectionStrinString);
adapter.SelectCommand.CommandTimeout = _timeout;
adapter.Fill(ds);
var total = ds.Tables[0].Rows.Count;
Log.Info("cantidad de registros -->" + total);
var reader = ds.CreateDataReader();



La propiedad CommandTimeout de selectcomand es representada en segundos, y defecto son 30.






--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

martes, 19 de abril de 2011

Django bajo apache con appserv en windows

hace unos dias atras, en realidad hace mas de una semana, trate y logre que django esta bajo apache.

Bueno manos a la obra, yo tengo instalado appserv en c:\appserv y apache esta en c:\appserv\apache. ojo que esto deberia funcionar no solo para appserv, si no que para apache en general.

lo primero hay que bajar modwsgi de http://code.google.com/p/modwsgi/ una vez bajado el archivo el archivo con extension .so, este se debe dejar en la carpera de los modulos de apache, en mi caso es "C:\AppServ\Apache2.2\modules". Luego necesitamos que apache lea este nuevo mod, lo cual lo hacemos agregando lo siguiente a nuestro httpd.conf (C:\AppServ\Apache2.2\conf).



LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so


Ademas de esto se debe indicar el directorio sobre cual se monta y la url en que esta el website desarrollado con django, de la siguiente forma:


WSGIScriptAlias /almuerzo "D:/vhs/myProyects/almuerzo/almuerzo.wsgi"

<directory "D:/vhs/myProyects/almuerzo/" >
AllowOverride None
Options None
Order allow,deny
Allow from all
<directory >



Es muy importante reiniciar apache, para que los cambios se vean refrescado.y listo ya tengo corriendo django sin el servidor de desarrollo que viene, si no que con apache.

ya no tengo levantar el servidor de desarrollo, cada vez que alguien quiera entrar a la website, si no que esta siempre listo:D.

Aquí dejo mi url.py, que no tuve que hacerle absolutamente ninguna modificación



from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
# Examples:
url(r'^$', 'views.home', name='home'),
url(r'^almuerzo/orders/$', 'views.orders', name='orders'),
url(r'^almuerzo/orders/(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+)/$', 'views.navegation'),
url(r'^almuerzo/orders/new/', 'views.new'),
url(r'^almuerzo/orders/save/', 'views.save'),
url(r'^almuerzo/orders/rank/', 'views.orders_rank'),
# url(r'^almuerzo/', include('almuerzo.foo.urls')),

# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
url(r'^almuerzo/admin/', include(admin.site.urls)),
(r'^almuerzo/media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': 'D:/vhs/myProyects/almuerzo/media', 'show_indexes': True}),

)



Bueno aun sigo teniendo problemas con el administrador de Django, con las rutas, pero espero solucionarlo luego :D

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com