<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4705850358912941179</id><updated>2011-10-06T07:36:40.357-07:00</updated><category term='Programación'/><category term='Software'/><category term='PHP'/><category term='ISA Server'/><category term='Base de Datos'/><category term='Windows Server 2003'/><category term='Open Source'/><category term='OpenGL'/><category term='Windows 7'/><category term='Servidores'/><title type='text'>Sistemas Computacionales</title><subtitle type='html'>Blog con experiencias, frustraciones y aprendizajes relacionados con el mundo de los Sistemas Computacionales</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-786986283946382788</id><published>2011-08-17T09:36:00.001-07:00</published><updated>2011-08-17T09:58:30.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>IIS se cae al habilitar extensión de PHP para Postgres</title><content type='html'>Intentando configurar un servidor web con PHP para que pudiera conectarse a Postgres me sucedía que al habilitar la extensión de postgres (quitando el ";" a la línea &lt;em&gt;extension = php_pgsql.dll&lt;/em&gt; del php.ini) el servidor IIS se caía.&lt;br /&gt;&lt;br /&gt;Al parecer este archivo en las versiones posteriores a la 5.2.5 hacen que el IIS falle. La solución fue sencilla: conseguir el archivo dll de alguna versión anterior de PHP, 5.2.5 o menos, y sustituirla en el directorio &lt;em&gt;ext&lt;/em&gt;. Funciona sin problemas y ya puede conectarse a la base de datos PostgreSQL&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-786986283946382788?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/786986283946382788/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/08/iis-se-cae-al-habilitar-extension-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/786986283946382788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/786986283946382788'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/08/iis-se-cae-al-habilitar-extension-de.html' title='IIS se cae al habilitar extensión de PHP para Postgres'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-5182208534558642038</id><published>2011-07-20T15:23:00.000-07:00</published><updated>2011-07-21T15:27:48.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><title type='text'>Utilizando SSLSockets en un ambiente de prueba</title><content type='html'>&lt;div&gt;He estado desarrollando una aplicación en Java que utiliza Sockets para la comunicación entre el cliente y el servidor. Inicialmente lo hice con Sockets normales, pero a la hora de pasarlo a SSLSockets me encontré con varios problemitas que complicaron la implementación, después de invesitgar un poco y hacer cambios a prueba y error logré hacerlo funcionar.    &lt;br /&gt;    &lt;br /&gt;Siguiendo esta lista de pasos, podrás hacer funcionar tu aplicación con SSLSockets en un ambiente de pruebas donde quizás no tengas instalado un certificado SSL válido (Este post asume que conoces, al menos de manera general, qué es SSL y cómo funciona):     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Servidor&lt;/em&gt;&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;Lo primero que se necesita hacer es crear un certificado SSL para el servidor, el cual será utilizado para establecer la comunicación con el cliente. Para la creación de este certificado se puede utilizar la herramienta keytool que viene en el JDK y en el JRE de Sun Microsystems.     &lt;br /&gt;    &lt;br /&gt;Para crear este certificado corremos la siguiente instrucción: &lt;font size="2"&gt;     &lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;font size="2"&gt;&lt;font size="1"&gt;keytool -genkey -keystore miKeyStore -alias unAlias -keypass clave -storepass claveDeKeyStore &lt;/font&gt;&lt;/font&gt;  &lt;div&gt;-keystore genera un archivo que es el almacén de claves (KeyStore), en él se guardará el certificado autofirmado y el par de claves pública/privada. Si no especificamos este comando se creará un archivo en el directorio raíz del usuario con el nombre &amp;quot;.keystore&amp;quot;.    &lt;br /&gt;    &lt;br /&gt;-alias es el nombre con el que haremos referencia al par de claves creado.     &lt;br /&gt;    &lt;br /&gt;-keypass es el password para acceder a la clave privada     &lt;br /&gt;    &lt;br /&gt;-storepass es la clave para acceder al KeyStore     &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;Para saber que escribir en cada una de los inputs que el programa esperará, o para conocer que otras características puedes utilizar con keytool puedes consultar alguno de estos links: &lt;a href="http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=securitySSLKeytool"&gt;http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=securitySSLKeytool&lt;/a&gt; o &lt;a href="http://download.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html"&gt;http://download.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html&lt;/a&gt;. Una vez creado el archivo deberá ser copiado en el directorio de trabajo donde correrá nuestro Servidor.     &lt;br /&gt;    &lt;br /&gt;Ahora estamos listos para programar nuestro servidor en Java, el cual debiera ser algo similar a esto:     &lt;br /&gt;    &lt;br /&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;public class Servidor {        &lt;br /&gt;        &lt;ul&gt;public static void main(String args[]) {          &lt;br /&gt;          &lt;ul&gt;System.setProperty(&amp;quot;javax.net.ssl.keyStore&amp;quot;, &amp;quot;miKeyStore&amp;quot;);            &lt;br /&gt;System.setProperty(&amp;quot;javax.net.ssl.keyStorePassword&amp;quot;, &amp;quot;claveDeKeyStore&amp;quot;);             &lt;br /&gt;try {             &lt;br /&gt;            &lt;ul&gt;SSLServerSocketFactory ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();              &lt;br /&gt;SSLServerSocket sss = (SSLServerSocket)ssf.createServerSocket(9999);               &lt;br /&gt;              &lt;br /&gt;SSLSocket s = (SSLSocket)sss.accept();               &lt;br /&gt;LineNumberReader in = new LineNumberReader(new InputStreamReader(s.getInputStream()));               &lt;br /&gt;PrintWriter out = new PrintWriter(s.getOutputStream());               &lt;br /&gt;              &lt;br /&gt;String linea = in.readLine();               &lt;br /&gt;System.out.println(linea);               &lt;br /&gt;out.println(&amp;quot;respuesta&amp;quot;);               &lt;br /&gt;out.flush();               &lt;br /&gt;&lt;/ul&gt; } catch (Exception e) {e.printStackTrace();}             &lt;br /&gt;&lt;/ul&gt; }           &lt;br /&gt;&lt;/ul&gt; }&lt;/font&gt;       &lt;br /&gt;&lt;/font&gt;    &lt;br /&gt;No es estrictamente necesario incluir los &lt;em&gt;setProperty&lt;/em&gt; en el código, pueden agregarse en la línea de comando al momento de correr el programa, de la siguiente manera:     &lt;br /&gt;    &lt;br /&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;java -Djavax.net.ssl.keyStore=miKeystore -Djavax.net.ssl.keyStorePassword=claveDeKeyStore Server        &lt;br /&gt;&lt;/font&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;Aquí puede ser que tengas tu primer problema, y que al momento de correr el servidor obtengas el siguiente error:     &lt;br /&gt;    &lt;br /&gt;&lt;font size="1"&gt;java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;Este error se debe a que no pudo obtenerse la clave del certificado y puede ser por varias razones, la más común es que no estés enviando la clave correcta o que no se encuentre el archivo especificado; pero si se tiene seguridad que no es debido a estos problemas, el error puede deberse a que indicaste una clave distinta en el &lt;strong&gt;keypass&lt;/strong&gt; y el &lt;strong&gt;storepass&lt;/strong&gt;. Como estamos en un ambiente de prueba podemos establecer ambos passwords con el mismo valor y de esta manera el error desaparecerá. Para implementarlo en un ambiente de producción, deberás programas un KeyManager ya que JSSE no provee una manera adecuada de especificar estos passwords a través de System Properties.&lt;/font&gt;&lt;font size="2"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/div&gt; &lt;font size="2"&gt;&lt;/font&gt;  &lt;p&gt;   &lt;br /&gt;&lt;em&gt;&lt;strong&gt;Cliente&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;El código para el cliente podría ser de la siguiente forma:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;public class Cliente { &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;&lt;font size="1"&gt;public static void main(String args[]) {      &lt;br /&gt;&lt;/font&gt;    &lt;ul&gt;&lt;font size="1"&gt;try {        &lt;br /&gt;&lt;/font&gt;      &lt;ul&gt;&lt;font size="1"&gt;SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();          &lt;br /&gt;SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(&amp;quot;localhost&amp;quot;, 9999);           &lt;br /&gt;&lt;/font&gt;        &lt;p&gt;&lt;font size="1"&gt;LineNumberReader in;            &lt;br /&gt;PrintWriter out;             &lt;br /&gt;in = new LineNumberReader(new InputStreamReader(s.getInputStream()));             &lt;br /&gt;out = new PrintWriter(s.getOutputStream());&lt;/font&gt;&lt;/p&gt;        &lt;p&gt;&lt;font size="1"&gt;out.println(&amp;quot;hola&amp;quot;);            &lt;br /&gt;out.flush();             &lt;br /&gt;System.out.println(in.readLine());&lt;/font&gt;&lt;/p&gt;     &lt;/ul&gt;     &lt;font size="1"&gt;} catch (Exception exception) { exception.printStackTrace(); }        &lt;br /&gt;&lt;/font&gt;&lt;/ul&gt;   &lt;font size="1"&gt;}      &lt;br /&gt;&lt;/font&gt;&lt;/ul&gt; &lt;font size="1"&gt;}&lt;/font&gt;   &lt;p&gt;Pero muy probablemente obtendremos el siguiente error:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Este error se debe a que el certificado que estamos utilizando no es un certificado SSL válido. El esquema utilizado por SSL es conocido como X.509 y Java utiliza un TrustManager para este esquema, llamado x509TrustManager. Para poder evitar este error tenemos que crear un TrustManager diferente que acepte todos los certificados y no nos genere un error y utilizar este para la creación del Socket. Nuestro código quedaría algo así:&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;public class Cliente {&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;&lt;font size="1"&gt;public static void main(String args[]) {      &lt;br /&gt;&lt;/font&gt;    &lt;ul&gt;&lt;font size="1"&gt;try {        &lt;br /&gt;&lt;/font&gt;      &lt;ul&gt;&lt;font size="1"&gt;X509TrustManager tm = new X509TrustManager() {&amp;#160;&amp;#160; &lt;br /&gt;&lt;/font&gt;        &lt;ul&gt;&lt;font size="1"&gt;public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { }            &lt;br /&gt;public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { }             &lt;br /&gt;public X509Certificate[] getAcceptedIssuers() { return null; }             &lt;br /&gt;&lt;/font&gt;&lt;/ul&gt;       &lt;font size="1"&gt;};&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/ul&gt;      &lt;p&gt;&lt;font size="1"&gt;SSLContext ctx = SSLContext.getInstance(&amp;quot;TLS&amp;quot;);          &lt;br /&gt;ctx.init(null, new TrustManager[]{tm}, null);&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="1"&gt;SSLSocketFactory sslsocketfactory = ctx.getSocketFactory();          &lt;br /&gt;SSLSocket s = (SSLSocket) sslsocketfactory.createSocket(&amp;quot;192.168.0.32&amp;quot;, 9999);&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="1"&gt;LineNumberReader in;          &lt;br /&gt;PrintWriter out;           &lt;br /&gt;in = new LineNumberReader(new InputStreamReader(s.getInputStream()));           &lt;br /&gt;out = new PrintWriter(s.getOutputStream());&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="1"&gt;out.println(&amp;quot;hola&amp;quot;);          &lt;br /&gt;out.flush();           &lt;br /&gt;System.out.println(in.readLine());&lt;/font&gt;&lt;/p&gt;      &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt; } catch (Exception exception) {       &lt;br /&gt;exception.printStackTrace();       &lt;br /&gt;}       &lt;br /&gt;&lt;/ul&gt; }     &lt;br /&gt;&lt;/ul&gt; }    &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Una vez hecho esto, nuestros dos procesos se comunicarán utilizando SSL sin problemas :).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-5182208534558642038?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/5182208534558642038/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/07/utilizando-sslsockets-en-un-ambiente-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5182208534558642038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5182208534558642038'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/07/utilizando-sslsockets-en-un-ambiente-de.html' title='Utilizando SSLSockets en un ambiente de prueba'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-484519021740396030</id><published>2011-07-18T09:15:00.000-07:00</published><updated>2011-07-18T10:39:44.232-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>No se puede iniciar sesión localmente en un Windows SBS 2003</title><content type='html'>Al intentar entrar a un servidor Windows SBS 2003 de manera local con el usuario administrador me aparecía el mensaje "Las directivas locales de este sistema no le permiten iniciar una sesión interactiva", pero si podía ingresar al sistema desde una conexión remota. Después de revisar la ayuda en el sitio de Microsoft (&lt;a href="http://support.microsoft.com/kb/841188/es"&gt;http://support.microsoft.com/kb/841188/es&lt;/a&gt;) encontré que si el administrador pertenece al grupo &lt;strong&gt;Operadores Remotos&lt;/strong&gt; (Remote Operators) no podrá ingresar de manera local, ya que por default en Windows SBS 2003 este grupo tiene denegado el acceso local al sistema.&lt;br /&gt;&lt;br /&gt;Noté que este era mi caso y procedí a eliminar el usuario administrador del grupo Operadores Remotos. Excelente, ya podía ingresar al servidor de manera local, pero ya no podía hacerlo de manera remota.&lt;br /&gt;&lt;br /&gt;¿Cómo hacer que el administrador pueda ingresar de manera remota y local al servidor? Esto no debería ser un problema, pero no sé por qué razón el administrador estaba en Operadores Remotos ni porque no me le daba acceso normal al quitarlo de ahi, pero la solución es sencilla:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Abrir el editor de objetos de directivas de grupo escribiendo en la línea de comandos gpedit.msc&lt;/li&gt;&lt;li&gt;Irse a Configuración del equipo -&amp;gt; Configuración de Windows -&amp;gt; Configuración de seguridad -&amp;gt; Directivas locales -&amp;gt; Asignación de derechos de usuario.&lt;/li&gt;&lt;li&gt;Encontrarás ahi la directiva "Permitir el inicio de sesión a través de Servicios de Terminal Server", darle doble click&lt;/li&gt;&lt;li&gt;Presionar el botón &lt;em&gt;Agregar un usuario o grupo&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Escribir el usuario o grupo que deseas agregar, asegúrate de incluir el nombre de dominio, por ejemplo: MiDominio\administrador&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Con esto el administrador ya podrá ingresar de manera local y remota.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-484519021740396030?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/484519021740396030/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/07/no-se-puede-iniciar-sesion-localmente.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/484519021740396030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/484519021740396030'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/07/no-se-puede-iniciar-sesion-localmente.html' title='No se puede iniciar sesión localmente en un Windows SBS 2003'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-4545280949882235055</id><published>2011-03-08T13:32:00.000-08:00</published><updated>2011-03-08T14:04:17.102-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Base de Datos'/><title type='text'>Conexión ODBC en Windows 7</title><content type='html'>Deseaba configurar una máquina con Windows 7 para que pudiera conectarse a través de ODBC con un servidor SQL Server 2000, y a pesar que la configuración terminaba exitosamente, la aplicación no podía conectarse.&lt;br /&gt;&lt;br /&gt;Me parecía raro también que al momento de configurar el ODBC no miraba la larga lista de drivers que normalmente miro sino que solamente me aparecía uno.&lt;br /&gt;&lt;br /&gt;El problema era que mi versión del Windows es de 64 bits y existen dos aplicaciones administradoras de ODBC, una de 32-bits y otra de 64-bits. La versión de 32 bits se encuentra en la carpeta &lt;em&gt;%systemdrive%\Windows\SysWow64&lt;/em&gt; y la de 64bits se encuentra en &lt;em&gt;%systemdrive%\Windows\System32&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;La versión de 32 bits muestra el DSN de sistema de 32 bits, DSN de usuario de 32 bits y DSN de usuario de 64 bits. La versión de 64 bits muestra el DSN de sistema de 64 bits, DSN de usuario de 32 bits y DSN de usuario de 64 bits.&lt;br /&gt;&lt;br /&gt;Así que corriendo la versión correcta del administrador, se puede solucionar el problema.&lt;br /&gt;&lt;br /&gt;Más información en &lt;a href="http://support.microsoft.com/kb/942976"&gt;http://support.microsoft.com/kb/942976&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-4545280949882235055?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/4545280949882235055/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/03/conexion-odbc-en-windows-7.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4545280949882235055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4545280949882235055'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/03/conexion-odbc-en-windows-7.html' title='Conexión ODBC en Windows 7'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-2287581055008056666</id><published>2011-03-08T13:04:00.000-08:00</published><updated>2011-03-08T13:26:59.874-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Unir Windows 7 de 64 bits a un dominio Windows SBS 2003</title><content type='html'>Intenté unir una PC con Windows 7 a un dominio Windows SBS 2003 y no encontré mayor problema que instalar algunas actualizaciones en el Servidor administrador del dominio. Pero cierta computadora en particular me dió bastante guerra. Se lograba unir al dominio aunque al momento de hacerlo tiraba un mensaje de error mencionando algo del DNS.&lt;br /&gt;&lt;br /&gt;Una vez que la computadora reiniciaba no había forma de que entrara con alguno de los usuarios del dominio, ni siquiera con el administrador. Después de mucho pelear con la computadora, se me ocurrió averiguar la diferencia que había entre esta computadora y las otras con Windows 7 que habían logrado unirse al dominio sin problemas (esto, porque asumí que el problema estaba relacionado con el Sistema Operativo, ya que nunca me dió ese tipo de problemas con XP).&lt;br /&gt;&lt;br /&gt;La diferencia era (además de la marca de la computadora) que el sistema operativo era Windows 7 de 64 bits. No estoy totalmente seguro que está haya sido la causa del problema, pero independientemente de eso, lo importante era averiguar cómo resolverlo. Así que si te ha pasado algo similar y tu computadora, aunque se una al dominio, no te permite ingresar a ella con usuarios del dominio, esta fue la solución que yo encontré y me sirvió muy bien:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Instalar Support Tools que vienen en los CDs de tu Windows Server 2003&lt;/li&gt;&lt;li&gt;Ejecutar la aplicación ADSIEDIT.MSC que se encuentra en el directorio Support Tools&lt;/li&gt;&lt;li&gt;En el menú de la derecha seleccionar Domain -&gt; DC =&lt;dominio&gt; -&gt; CN=Computers&lt;/li&gt;&lt;li&gt;Buscar la computadora afectada, presionar el botón derecho sobre ella y elegir Propiedades&lt;/li&gt;&lt;li&gt;Dar dobleclick en el campo ServicePrincipalName de la lista&lt;/li&gt;&lt;li&gt;Agregar el siguiente valor: HOST/nombrehost.dominio.xyz&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Listo, al hacer esto, podrás ingresar en la computadora con cualquiera de los usuarios del dominio sin ningún problema.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-2287581055008056666?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/2287581055008056666/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/03/unir-windows-7-de-64-bits-un-dominio.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2287581055008056666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2287581055008056666'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/03/unir-windows-7-de-64-bits-un-dominio.html' title='Unir Windows 7 de 64 bits a un dominio Windows SBS 2003'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-8206403341247191173</id><published>2011-01-07T11:24:00.000-08:00</published><updated>2011-01-07T11:34:22.631-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='ISA Server'/><title type='text'>DNS cache en ISA Server</title><content type='html'>Cambié la dirección de uno de mis servidores y cuando intentaba accesar el sitio hospedado en él desde cualquier navegador nunca cargaba. Supuse que era problema de resolución de la dirección IP, así que me aseguré que la dirección se hubiera cambiado en el DNS.&lt;br /&gt;&lt;br /&gt;Luego realicé un nslookup para chequear si el DNS devolvía la dirección correcta y si lo hacía. Al parecer solo los navegadores tenian este problema y seguían resolviendo la dirección anterior.&lt;br /&gt;&lt;br /&gt;Después de revisar durante un rato, noté que el problema se daba solamente si estaba levantado el Cliente Firewall de ISA, así que supuse que el ISA Server manejaba algún tipo de caché para DNS y que me seguía devolviendo la dirección anterior.&lt;br /&gt;&lt;br /&gt;En efecto, este era el problema, y la solución es sencilla: reiniciar el servidor ISA o limpiar el caché. Para limpiar el caché (o borrar solamente la entrada que está dando problemas) descargué el DNSTools para ISA Server, lo corrí, borré la entrada para la dirección antigua y listo, los clientes de mi red accesaron bien a la nueva dirección.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-8206403341247191173?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/8206403341247191173/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2011/01/dns-cache-en-isa-server.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8206403341247191173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8206403341247191173'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2011/01/dns-cache-en-isa-server.html' title='DNS cache en ISA Server'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-5616057300494968403</id><published>2010-12-06T11:30:00.000-08:00</published><updated>2010-12-10T13:29:58.162-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Microsoft Exchange 2010 en Windows Server 2008 R2</title><content type='html'>&lt;p&gt;Debido a las limitantes que tiene Exchange 2003 (y además para estar actualizado) decidí migrar mi servidor de correos a un Exchange 2010 en un Windows Server 2008 R2. Instalarlo se miraba más complicado que lo que supuse y encontrar instrucciones que me guiarán mucho más. Busque en varios artículos de Microsoft pero no lograba encontrar una descripción paso a paso de lo que debía hacer.&lt;br /&gt;&lt;br /&gt;Después de mucho buscar, encontré este artículo que me pareció excelente: &lt;a href="http://www.experts-exchange.com/Software/Server_Software/Email_Servers/Exchange/A_2881-Migrate-Small-Business-Server-2003-to-Exchange-2010-and-Windows-2008-R2.html"&gt;&lt;span style="font-size:85%;"&gt;http://www.experts-exchange.com/Software/Server_Software/Email_Servers/Exchange/A_2881-Migrate-Small-Business-Server-2003-to-Exchange-2010-and-Windows-2008-R2.html&lt;/span&gt;&lt;/a&gt;, muestra los pasos a detalle y muy bien explicados.&lt;br /&gt;&lt;br /&gt;Solamente tuve dos pequeños problemas, de los cuales no se mencionaba nada en el artículo:&lt;br /&gt;&lt;br /&gt;1) Al momento de instalar el Exchange, me tiraba un error de llamada a procedimientos remotos (RPC) en el servidor Exchange 2003, por lo que no podía instalar la funcionalidad de Hub Transport o Transpote de concentradores y detenía la instalación. Después de investigar un poco, me di cuenta que debía entrar a mi ISA Server, instalado en el servidor Exchange, y en la sección configuración -&gt; complementos deshabilitar los Filtros RPC. Una vez hecho esto, debi instalar de nuevo las caracteristicas que hacían falta y listo.&lt;br /&gt;&lt;br /&gt;2) Una vez que trasladaba los buzones de los usuarios, tenía un problema: los usuarios en el exchange 2003 podían comunicarse hacia el exterior y hacia el exchange 2010; pero los usuarios en el exchange 2010 solamente podían comunicarse entre ellos. Este problemita me costó más que el anterior ¡porque habían mil opiniones en Internet! El mensaje que recibía decía que existía un error de Socket y que la comunicación había sido cortada; encontré el problema: de nuevo, tenía problemas en mi ISA Server por tener los puertos SMTP cerrados. Una vez resuelto esto me aparecía "Dirección IP de destino principal 451 4.4.0 ha respondido con: "451 5.7.3 no se puede conseguir la autenticación del servidor de Exchange".". Este problema se debía a que en el servidor Exchange 2003 hay que habilitar la &lt;em&gt;Autenticación de Windows Integrada&lt;/em&gt;, tal como se indica en este artículo de Microsoft: &lt;a href="http://support.microsoft.com/kb/979175/es"&gt;&lt;span style="font-size:85%;"&gt;http://support.microsoft.com/kb/979175/es&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Una vez resuelto esos dos problemas, mi exchange se encuentra trabajando perfectamente. ¡A seguirlo travesiando entonces para ver qué nuevas cosas interesantes trae! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-5616057300494968403?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/5616057300494968403/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/12/microsoft-exchange-2010-en-windows.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5616057300494968403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5616057300494968403'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/12/microsoft-exchange-2010-en-windows.html' title='Microsoft Exchange 2010 en Windows Server 2008 R2'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-4046021768314906503</id><published>2010-11-25T13:17:00.000-08:00</published><updated>2010-11-25T15:19:19.336-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Base de Datos'/><title type='text'>Pérdida de datos en SQL Server</title><content type='html'>Si por error has perdido ciertos datos en tu base de datos SQL Server, ya sean registros o tablas completas, y el último backup que tienes es demasiado viejo y no contiene los datos que necesitas recuperar, existe una manera para poder recuperar tu información por completo.&lt;br /&gt;&lt;br /&gt;Una vez que se ha realizado un commit sobre las transacciones en una base de datos, no puedes ejecutar un rollback para deshacer esta operación; así que necesitarás de algún backup para recuperar tu información. Si tienes un backup lo suficiente nuevo como para restaurar tus datos, pues no tendrás ningún problema, pero si no lo tienes aún asi puedes recuperarlos siguiendo estos pasos:&lt;br /&gt;&lt;br /&gt;1. &lt;strong&gt;Realiza un backup de transacciones de tu base de datos&lt;/strong&gt;. Entra al SQL Server Enterprise Manager y sobre tu base de datos presiona el botón derecho. Selecciona la opción &lt;em&gt;Todas las tareas&lt;/em&gt; y luego &lt;em&gt;Copia de seguridad de la base de datos...&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 212px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5543607068979317602" border="0" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/TO7ZQgjbS2I/AAAAAAAAAF4/1ulJQ4HsnE4/s320/Dibujo1.JPG" /&gt;&lt;br /&gt;En la ventana de copia de seguridad selecciona la opción Registro de transacciones e indica el lugar donde deseas que se almacene este backup y asignale una extensión &lt;em&gt;trn&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 79px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5543607069819254178" border="0" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/TO7ZQjrrtaI/AAAAAAAAAGA/tk3Bn4MMh_Y/s320/Dibujo2.JPG" /&gt;&lt;br /&gt;2. &lt;strong&gt;Restaura el backup más nuevo que tengas&lt;/strong&gt;. Busca el backup más nuevo que tengas y restauralo preferiblemente en otro servidor. Si no cuentas con otro servidor, puedes restaurarlo en una nueva base de datos pero asegurate de cambiar el nombre del archivo físico donde será restaurado para no sobreescribir la base de datos original. Esta restauración se debe realizar con ciertos parámetros especiales. Si la restauración se realizará a través de código utiliza la siguiente sintaxis:&lt;br /&gt;&lt;br /&gt;RESTORE DATABASE NuevaBD&lt;br /&gt;FROM DISK = 'C:\Backups\ultimoBackup.bak'&lt;br /&gt;WITH&lt;br /&gt;MOVE 'BDPrevia' TO 'C:\Data\NuevaBD.mdf',&lt;br /&gt;MOVE 'BDPrevia_Log' TO 'C:\Data\NuevaBD_Log.ldf',&lt;br /&gt;NORECOVERY&lt;br /&gt;&lt;br /&gt;Las sentencias MOVE sirven para indicar adonde se ubicarán físicamente los archivos lógicos de la base de datos. Esto es lo que nos evitará sobreescribir la base de datos ya existente.&lt;br /&gt;&lt;br /&gt;NORECOVERY lo utilizamos para indicarle que sobre esta Base de Datos restauraremos un archivo de transacciones, por lo que la base de datos no quedará operativa sino hasta después de realizar esta restauración donde le indicaremos que lo haga con RECOVERY.&lt;br /&gt;&lt;br /&gt;Si la restauración de la base de datos la haremos a través de la interfaz gráfica hay que asegurarse de cambiar el nombre del archivo físico del archivo mdf y del archivo ldf e indicarle que la base de datos quedará no operativa tal como se indica en la siguiente figura:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_W8pEFqRX9hU/TO7uZKspwoI/AAAAAAAAAGY/wDFGuzE_xyY/s1600/Dibujo3.bmp"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 268px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5543630307475440258" border="0" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/TO7uZKspwoI/AAAAAAAAAGY/wDFGuzE_xyY/s320/Dibujo3.bmp" /&gt;&lt;/a&gt;&lt;br /&gt;Si se utiliza la versión Studio Express del SQL Server Management, estos mismos parámetros pueden ser configurados en la ventana de restauración en la ficha "Options".&lt;br /&gt;&lt;br /&gt;Si no tienes ningún backup no podrás realizar la recuperación de tus datos, o por lo menos no conozco ninguna forma, si lográs hacerlo por favor comentalo en este post :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. &lt;strong&gt;Restaura el archivo de transacciones&lt;/strong&gt;. El último paso es restaurar el archivo de transacciones especificando la fecha anterior a la pérdida de los datos; es decir, que si perdimos los datos el 15 de noviembre de 2010 a la 1 p.m., podemos indicarle que restaure las transacciones hasta cualquier fecha antes de esta en la cual estemos seguros que estaban todos los datos que necesitamos antes de ser borrados. A través de código se utilizaría una sintaxis como esta:&lt;br /&gt;&lt;br /&gt;RESTORE LOG BDNueva&lt;br /&gt;FROM DISK = 'C:\Backups\transacciones.trn'&lt;br /&gt;WITH&lt;br /&gt;STOPAT=N'11/15/2010 8:00:00 AM',&lt;br /&gt;RECOVERY&lt;br /&gt;&lt;br /&gt;A través de la interfaz gráfica en la versión Studio Express presiona el botón derecho sobre la base de datos (la cual indicará que está en estado de Restauración) y selecciona &lt;em&gt;Tasks&lt;/em&gt;, luego &lt;em&gt;Restore &lt;/em&gt;y luego&lt;em&gt; Transaction Log...&lt;/em&gt; Después debes indicarle que la base de datos debe quedar operativa e indicarle el punto en el tiempo hasta el que quieres restaurar las transacciones.&lt;br /&gt;&lt;br /&gt;Listo, con esto tendrás tus datos en BDNueva y podrás sacar de ella lo que necesites. Básicamente lo que este proceso realiza es restaurar una base de datos vieja y luego ejecutar de nuevo las transacciones que se realizaron hasta cierta fecha, generando así nuevamente los datos que necesitamos.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-4046021768314906503?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/4046021768314906503/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/11/perdida-de-datos-en-sql-server.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4046021768314906503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4046021768314906503'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/11/perdida-de-datos-en-sql-server.html' title='Pérdida de datos en SQL Server'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_W8pEFqRX9hU/TO7ZQgjbS2I/AAAAAAAAAF4/1ulJQ4HsnE4/s72-c/Dibujo1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-666694381794449523</id><published>2010-11-10T13:07:00.000-08:00</published><updated>2010-11-10T13:27:33.863-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servidores'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Backup del correo</title><content type='html'>Una de las ventajas que ofrece el servidor de correos Microsoft Exchange es la facilidad de trasladar el buzón de un usuario desde una computadora a otra sin demasiado esfuerzo; además de esto, contamos con un backup permanente del buzón de cada uno de los usuarios de la empresa.&lt;br /&gt;&lt;br /&gt;Microsoft Outlook puede conectarse a un servidor Exchange local, de manera que el buzón del usuario se almacenará en ambos equipos: en la computadora del usuario en un archivo .ost (offline storage table, buzón sin conexión) y en el servidor Exchange.&lt;br /&gt;&lt;br /&gt;Los archivos ost permiten a los usuarios accesar a su correo aun cuando el outlook no se encuentre conectado al servidor Exchange; una vez que se conecte, los buzones se sincronizarán. Cuando Outlook se configura para trabajar sin el Exchange, trabaja sobre archivos .pst (personal storage table) que almacena el buzón y demás carpetas del usuario.&lt;br /&gt;&lt;br /&gt;Como el buzón en realidad se encuentra almacenado en el servidor, si deseamos formatear la computadora de un usuario o trasladarlo a una nueva computadora, no necesitamos sacar backup de su correo; ya que al configurar el outlook en la nueva computadora, éste se sincronizará con el servidor y creará una copia del buzón almacenado en él en el archivo .ost. Pero hay que tener mucho cuidado con aquellos usuarios que utilicen equipos portátiles y trabajen en sus casas con el outlook, porque si les formateamos sus computadoras antes de que éstas realicen la sincronización con el servidor, los correos que hayan enviado o recibido mientras se encontraban desconectados nunca se almacenaron en el servidor por lo tanto se perderán. Por tal razón, hay que encender la computadora, abrir el outlook, asegurarse que esté conectado con el Exchange y presionar Enviar/Recibir para permitir que la sincronización se lleve a cabo antes de realizar el formateo.&lt;br /&gt;&lt;br /&gt;De no tener este cuidado puede ser que nos toque tener que explicarle al usuario lo que ha pasado con esos correos que ha enviado desde su casa el día anterior, y eso...no será tarea fácil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-666694381794449523?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/666694381794449523/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/11/backup-del-correo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/666694381794449523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/666694381794449523'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/11/backup-del-correo.html' title='Backup del correo'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-3628771384427262914</id><published>2010-04-23T10:10:00.000-07:00</published><updated>2010-04-23T15:47:47.282-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>Introducción a Motores 3D (parte 3)</title><content type='html'>&lt;em&gt;&lt;strong&gt;Projection Transformation y Perspective Division&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;En el &lt;a href="http://cevallejo.blogspot.com/2009/10/introduccion-motores-3d-parte-2.html"&gt;post anterior&lt;/a&gt; mencionaba un poco acerca de la Modelview Transformation. Como resultado de esta transformación se obtienen las coordenadas de vista, estas son las coordenadas desde el punto de vista del observador. El siguiente paso es la Projection Transformation y Perspective Division, donde se determina que objetos y/o partes de estos serán mostrados en la pantalla. Además hace un calculo del eje z ya que como nuestro monitor es en 2D debe hacer una transformación para representar objetos 3D, y así poder simular aquellas caras de los objetos que se encuentran más lejos del observador.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 201px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5463449240096664146" border="0" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/S9ISIyRW6lI/AAAAAAAAADg/JR2vZwUAk9M/s400/proyeccion.bmp" /&gt;&lt;br /&gt;&lt;br /&gt;En la figura, los objetos contenidos dentro del plano a y b son los que se proyectarán en pantalla. Estos planos se determinan a través de la función glFrustum o glPerspective. También puede generarse una proyección paralela, con todos los objetos contenidos en un paralelogramo, esto se logra a través de la función glOrtho. Pero para producir proyecciones en perspectiva se utilizan las mencionadas primero.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Viewport Transformation&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;La última transformación por la que pasan cada uno de los puntos es la Viewport Transformation. Ésta básicamente consiste en transformar las coordenadas normalizadas de los puntos en coordenadas de la ventana donde se mostrarán. Se utiliza la función glViewport para indicarle a OpenGL los parámetros que deberá utilizar para realizar la transformación.&lt;br /&gt;&lt;br /&gt;Un ejemplo de la configuración del OpenGL para estas transformaciones podría ser así:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;const float ar = (float) width / (float) height;&lt;br /&gt;&lt;br /&gt;glViewport(0, 0, width, height);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);&lt;br /&gt;&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glLoadIdentity() ; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;glViewport establece las medidas de la pantalla y glFrustum establece la perspectiva para la representación de los objetos. Nótese que se establece GL_PROJECTION como la matriz de trabajo para estas transformaciones, luego se cambia a GL_MODELVIEW donde más adelante en el programa se añadírían los puntos de los objetos como se mostró en el post anterior, utilizando la matriz de cada uno de éstos para colocarlos en la posición que les corresponde en el mundo 3D.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Conociendo estas transformaciones, y aprovechando que OpenGL nos facilita el cálculo de todas ellas; el programador puede concentrarse en cuestiones como el movimiento de la cámara, movimiento de los objetos, reglas del juego, etc. para crear su motor 3D.&lt;br /&gt;&lt;br /&gt;Hay que tomar en cuenta también otro montón de cosas como ser la iluminación, sombras, efectos especiales, detección de colisiones, etc. algunas de las cuales requerirán de cálculos matemáticos complejos o del ingenio del programador para simularlos. Estas las expondré en los siguientes posts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-3628771384427262914?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/3628771384427262914/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/04/introduccion-motores-3d-parte-3.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3628771384427262914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3628771384427262914'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/04/introduccion-motores-3d-parte-3.html' title='Introducción a Motores 3D (parte 3)'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_W8pEFqRX9hU/S9ISIyRW6lI/AAAAAAAAADg/JR2vZwUAk9M/s72-c/proyeccion.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-8921204707116568188</id><published>2010-02-01T16:43:00.000-08:00</published><updated>2010-02-01T16:57:34.482-08:00</updated><title type='text'>Enorme Log</title><content type='html'>La unidad C en un Windows SBS 2003, se me estaba quedando sin espacio; lo cual me generaba una diversa variedad de errores: no funcionaban las impresoras, se perdía la conexión con el Exchange Server, y en el peor de los casos todas las licencias CAL del Windows parecían desaparecer, lo que ocasionaba que ningún usuario pudiera conectarse.&lt;br /&gt;&lt;br /&gt;Me tocaba estar borrando archivos temporales, sucesos de evento, vaciando la papelera, etc. para poder evitar estos problemas. No podía desinstalar ninguno de los programas que tenía y no deseaba formatear el servidor para hacer una partición más grande.&lt;br /&gt;&lt;br /&gt;Encontré algo que me ayudará a resolver el problema por lo menos durante un buen tiempo, y es que el Symantec Server cuenta con un servicio llamado Reporting Agents que crea un log en el directorio "C:\Archivos de Programa\Archivos comunes\Symantec Shared\Reporting Agents\Win32" en un archivo llamado ReportsSVC.log. Este archivo va creciendo y creciendo hasta hacerse enorme!, el mío tenía mas de 700MB.&lt;br /&gt;&lt;br /&gt;No encontré la forma de configurar la carpeta donde se crea este archivo para poder moverlo de mi disco C, pero si pude moverlo y hacer que comenzara con 1 KB de nuevo :). Solamente hay que detener el servicio Reporting Agents y mover o eliminar el archivo. No encontré mucho de importancia en él, pero por cualquier cosa lo salvé en otra partición :p&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-8921204707116568188?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/8921204707116568188/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/02/enorme-log.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8921204707116568188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8921204707116568188'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/02/enorme-log.html' title='Enorme Log'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-2192747917625527178</id><published>2010-01-18T08:07:00.000-08:00</published><updated>2010-01-18T08:41:29.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>MindManager 6 con MS Word 2007</title><content type='html'>MindManager es una fabulosa herramienta para la organización de ideas e incluso para realizar presentaciones. Tiene varias funcionalidades muy buenas, entre ellas la posibilidad de exportar los documentos a PowerPoint, Excel, Visio o Word, entre otros.&lt;br /&gt;&lt;br /&gt;Tengo la versión Professional 6, y todo funcionaba muy bien hasta que decidí actualizarme a Office 2007. La versión 6 del MindManager trabaja con Office 2003, pero al intentar exportar los documentos si tenemos instalado el Office 2007 en vez del 2003, probablemente el programa se quede trabado o nos tire un error.&lt;br /&gt;&lt;br /&gt;La nueva versión del MindManager se encuentra integrado con el Office 2007 y trae algunas características al parecer muy interesantes; pero yo necesitaba poder exportar documentos sin necesidad de desinstalar mi Office 2003 ni actualizar mi MindManager.&lt;br /&gt;&lt;br /&gt;Bajé una actualización del sitio de Mindjet (el fabricante) que aseguraba resolver el problema y permitir exportar a Office 2007. Instalé la actualización y al entrar a mi MindManager las opciones de exportar a Word y otras habían desaparecido, solamente quedó la opción de exportar a Powerpoint y a rangos de Excel. Esto definitivamente era peor que el estado inicial...&lt;br /&gt;&lt;br /&gt;Pero encontré la forma de solucionarlo, es bastante sencilla: solamente hay que ir al Control Panel y en la opción de Agregar y/o Quitar Programas le decimos que queremos cambiar la instalación de MindManager y luego seleccionamos la opción reparar. Al terminarse este proceso, las opciones de exportar a Word y otros programas reaparecen y funcionarán con el Office 2007 sin problemas!!...eso si, si queremos exportar a un archivo de office de 2003, tendremos problemas, así que en este caso hay que exportarlo a Office 2007, abrirlo en la aplicación respectiva y salvarlo como archivo de Office 2003, asunto arreglado!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-2192747917625527178?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/2192747917625527178/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2010/01/mind-manager-6-con-ms-word-2007.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2192747917625527178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2192747917625527178'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2010/01/mind-manager-6-con-ms-word-2007.html' title='MindManager 6 con MS Word 2007'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-4123598159131874179</id><published>2009-10-02T09:33:00.000-07:00</published><updated>2009-10-02T15:26:51.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>Introducción a Motores 3D (parte 2)</title><content type='html'>&lt;strong&gt;Representación en pantalla&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;En el &lt;a href="http://cevallejo.blogspot.com/2009/04/introduccion-motores-3d.html"&gt;post anterior&lt;/a&gt; mencionaba que para crear nuestro mundo 3D encontraríamos dos grandes desafíos: la modelación de los objetos en estructuras de datos y la representación de estos en nuestra pantalla 2D.&lt;br /&gt;&lt;br /&gt;Mostré un poco, de manera general, la modelación de los objetos; ahora hablaremos de la representación de estos.&lt;br /&gt;&lt;br /&gt;La representación de objetos 3D no es un tema fácil, requiere que el programador, no solamente sea un buen programador y conocedor del lenguaje, sino que además debe tener bastantes conocimientos de vectores, albegra lineal, física, geometría analítica, trigonometría, análisis numérico, etc.&lt;br /&gt;&lt;br /&gt;A pesar de que nuestro modelo almacena la información en tres dimensiones, debemos transformar esta información a dos dimensiones para representarlo en el monitor. Este cálculo matemático es demasiado complejo, y aunque es posible realizarlo, nos tomaría demasiado tiempo y además ya existen herramientas que lo hacen por nosotros. Una de estas herramientas es OpenGL, éste nos brinda las funciones necesarias para poder realizar estta transformación de nuestro modelo 3D al monitor 2D.&lt;br /&gt;&lt;br /&gt;Los objetos pasan por una serie de transformaciones para poder llegar a la representación final, estas transformaciones son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Modelview Transformation&lt;/li&gt;&lt;li&gt;Projection Transformation&lt;/li&gt;&lt;li&gt;Perspective Division&lt;/li&gt;&lt;li&gt;Viewport Transformation&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Modelview Transformation&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;En este paso, las coordenadas locales de cada objeto son tomadas y transformadas para darles una posición en el mundo 3D. Como pudimos ver anteriormente, las coordenadas que tenemos almacenadas en nuestro modelo, son coordenadas relativas al objeto y no a su posición en el mundo. En este paso, el objeto es movido a la posición que debe tener en el mundo 3D, ya sea a través de rotaciones, traslaciones o escalamientos. Es importante apuntar que la apariencia final del objeto depende del orden en que se apliquen estas transformaciones. Ejemplo:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5388104951008975506" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 228px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_W8pEFqRX9hU/SsZk59Fp2pI/AAAAAAAAACk/HI791f5tRYU/s400/ilu42.jpg" border="0" /&gt;&lt;br /&gt;En el inciso a) aplicamos primero una rotación al objeto y luego una traslación sobre el eje x, dado que su eje x está rotado se mueve diagonalmente. En el inciso b) aplicamos las mismas transformaciones pero en orden inverso, obteniendo así un resultado diferente. &lt;/p&gt;Además de estas operaciones, se debe tomar en cuenta también la posición de la cámara, lo que transformará entonces nuestras coordenadas anteriores a unas nuevas que dependen del punto de vista del observador.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5388130252012934290" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 380px; CURSOR: hand; HEIGHT: 400px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_W8pEFqRX9hU/SsZ76qrEVJI/AAAAAAAAACs/__bBmZ2vRro/s400/Dibujo.JPG" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Para lograr este tipo de transformaciones, OpenGL utiliza una matriz llamada la GL_MODELVIEW matrix. Cada vértice es multiplicado por los valores de esta matriz dándole así su posición real en el mundo. Es decir, que para cada objeto, debo almacenar información que me indique cómo ubicarlo en la posición q deseo. Aplico primero las transformaciones para modificar la matriz y luego voy calculando el valor de cada vértice. Para el ejemplo del inciso a) tendríamos un código similar a este:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glRotatef(10, 0.0f, 0.0f, 1.0f);&lt;br /&gt;glTranslatef(10.0f, 0.0f, 0.0f);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;La primera instrucción le indica a OpenGL con qué matriz vamos a trabajar. Luego cargamos en ella la matriz identidad y luego aplicamos las operaciones de rotación y traslación. Una vez que hemos realizado todas las transformaciones que deseamos para el objeto, le decimos a OpenGL cuáles son los vértices que queremos representar:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;glBegin(GL_TRIANGLES);&lt;br /&gt;for (j=0; j&amp;lt;numPolygons;j++) {&lt;br /&gt;//----------------- FIRST VERTEX -----------------&lt;br /&gt;glColor3f(polygon[j].red,polygon[j].green,polygon[j].blue);&lt;br /&gt;glVertex3f( vertex[ polygon[j].vertex[0] ].x, vertex[ polygon[j].vertex[0] ].y,vertex[ polygon[j].vertex[0] ].z);&lt;br /&gt;&lt;br /&gt;//----------------- SECOND VERTEX -----------------&lt;br /&gt;glColor3f(polygon[j].red,polygon[j].green,polygon[j].blue);&lt;br /&gt;glVertex3f( vertex[ polygon[j].vertex[1] ].x, vertex[ polygon[j].vertex[1] ].y,vertex[ polygon[j].vertex[1] ].z);&lt;br /&gt;&lt;br /&gt;//----------------- THIRD VERTEX -----------------&lt;br /&gt;glColor3f(polygon[j].red,polygon[j].green,polygon[j].blue);&lt;br /&gt;glVertex3f( vertex[ polygon[j].vertex[2] ].x, vertex[ polygon[j].vertex[2] ].y,vertex[ polygon[j].vertex[2] ].z);&lt;br /&gt;}&lt;br /&gt;glEnd();&lt;/span&gt;&lt;/p&gt;&lt;p&gt;glBegin le dice a OpenGL el tipo de polígono que vamos a utilizar para representar nuestro objeto. gl Color3f es para indicar el color y glVertex3f es para indicar las coordenadas de cada vértice.&lt;/p&gt;&lt;p&gt;Como podemos ver, se requiere entonces almacenar por cada objeto una matriz para ubicar el objeto en la posición correcta, por lo que en nuestra definición de la clase Object3D debemos añadir esta estructura de datos. La matriz es una matriz 4x4, la explicación del funcionamiento de esta matriz es un tema que esta fuera del objetivo de este post, pero que puede ser deducido a través de un breve análisis matemático. Puede consultarse el siguiente link: &lt;a href="http://www.geocities.com/valcoey/intro3d.html"&gt;http://www.geocities.com/valcoey/intro3d.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-4123598159131874179?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/4123598159131874179/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2009/10/introduccion-motores-3d-parte-2.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4123598159131874179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4123598159131874179'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2009/10/introduccion-motores-3d-parte-2.html' title='Introducción a Motores 3D (parte 2)'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_W8pEFqRX9hU/SsZk59Fp2pI/AAAAAAAAACk/HI791f5tRYU/s72-c/ilu42.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-6766068443065338998</id><published>2009-04-21T13:00:00.000-07:00</published><updated>2009-05-28T16:50:13.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>Introducción a Motores 3D</title><content type='html'>&lt;div&gt;Como lo prometí en un post hace mucho tiempo, quisiera explicar un poco acerca de lo que he aprendido de los motores 3D y la implementación de estos en OpenGL.&lt;br /&gt;&lt;br /&gt;Un motor 3D es un programa que nos permite movernos a través de un mundo 3D visualizando objetos 3D en una pantalla 2D, a través de una serie de algoritmos complejos que utilizan la información almacenada en estructuras de datos creadas para este fin.&lt;br /&gt;&lt;br /&gt;Podemos realizar un programa que imprima objetos 3D en la pantalla, pero implementar un motor que nos permita movernos dentro de un mundo tridimensional puede ser una tarea realmente compleja. Intentaré, a través de una serie de posts, explicar algunos principios básicos para la implementación de un motor 3D sencillo.&lt;br /&gt;&lt;br /&gt;La tarea de crear nuestro mundo 3D contiene dos grandes desafíos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La modelación de los objetos en estructuras de datos adecuadas&lt;/li&gt;&lt;br /&gt;&lt;li&gt;La representación de estas estructuras en nuestra pantalla 2D&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;strong&gt;Las Estructuras de Datos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Para poder crear un mundo 2D en una computadora quizás la utilización de archivos de imagenes, animaciones o dibujado de estructuras geométricas pueda bastarnos; pero, ¿cómo representar en nuestra computadora un objeto tridimensional, el cual tiene infinidad de puntos de vista, acercamientos, movimientos, etc? Almacenar cada pixel del objeto no sería práctico ni nos daría una representación muy real a la hora de mover el objeto a través del mundo virtual.&lt;br /&gt;&lt;br /&gt;La mejor forma de modelar los objetos es a través de polígonos. Gran parte de los motores 3D utilizados en los juegos y aplicaciones modernas utilizan polígonos para modelar casi cualquier objeto en su mundo 3D. Y quizás el polígono más utilizado es el triángulo, a partir de triángulos podemos representar cualquier polígono, incluso círculos y esferas.&lt;br /&gt;&lt;table align="center"&gt;&lt;p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img id="BLOGGER_PHOTO_ID_5338903004208626258" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 200px; CURSOR: hand; HEIGHT: 200px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/SheX_uAe-lI/AAAAAAAAABs/qt-zQysqpZQ/s200/509587_com_polygonalhead.jpg" border="0" /&gt;&lt;/td&gt;&lt;td&gt;&lt;img id="BLOGGER_PHOTO_ID_5340987291907450514" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 200px; CURSOR: hand; HEIGHT: 153px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_W8pEFqRX9hU/Sh7_pOwE5pI/AAAAAAAAAB0/YexHTAmR8AA/s200/screenshot1.JPG" border="0" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/p&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Para poder modelar cada uno de los triángulos que forman un objeto, solamente necesitamos almacenar las coordenadas de cada uno de sus tres vértices. Los vértices son los puntos principales sobre los que se basarán todos los cálculos de nuestro motor. Un vértice representa un punto en el espacio 3D y para modelarlo necesitamos almacenar su coordenada x, y, z. En C++, utilizaríamos una clase similar a esta:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;class Vertex3D { &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;Vertex3D();&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;Vertex3D(float, float, float);&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;float x, y, z;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Cada objeto de nuestro mundo 3D estará formado por polígonos (triángulos) que a su vez estarán formados por vértices. Hay diferentes formas de almacenar esta información en estructuras de datos: podríamos crear una clase Polygon3D que contenga 3 Objetos Vertex3D y una clase Object3D que contenga una lista de Polygon3D; pero quizás un método más adecuado sea crear una clase Object3D que contenga una lista de todos los vértices y una lista de todos los polígonos, donde cada uno de estos polígonos haga referencia a los vértices que lo forman; esto nos podría ahorrar la cantidad de objetos creados. Basado en esto, nuestra clase polígono sería algo así:&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;class Polygon3D {&lt;/span&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt;public:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;Polygon3D();&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;Polygon3D(int v1, int v2, int v3);&lt;br /&gt;int vertex[3];&lt;/span&gt; &lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;donde vertex[3] es un arreglo que contiene los índices de cada uno de los tres vértices que lo forman almacenados en la lista de vértices del objeto. Y nuestra clase Object3D sería algo así:&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;class Object3D {&lt;br /&gt;public:&lt;br /&gt;Object3D();&lt;/span&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt;int numPolygons; // cantidad de triangulos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;int numVertex; //cantidad de vertices&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Vertex3D *vertex; // Lista de vértices&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Polygon3D *polygon; // Lista de Polygon3Ds &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Supongamos entonces que queremos modelar un cubo. Necesitaríamos 8 vértices y 12 polígonos como podemos ver en la figura:&lt;/div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5341021716959058370" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 200px; CURSOR: hand; HEIGHT: 197px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_W8pEFqRX9hU/Sh8e9CD92cI/AAAAAAAAACM/ORSsWEpS6sM/s200/cubo.JPG" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;En nuestro programa en C++ habría un segmento de código similar a este:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;Object3D obj;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;//Preparación de las listas de objetos&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.numPolygons = 12;&lt;br /&gt;obj.numVertex = 8;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex = new Vertex3D[obj.numVertex];&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygons = new Polygons3D[obj.numPolygons];&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;//Coordenadas de los vertices&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex[0].x = 0.0; obj.vertex[0].y = 0.0; obj.vertex[0].z = 0.0;&lt;br /&gt;obj.vertex[1].x = 0.0; obj.vertex[1].y = 1.0; obj.vertex[1].z = 0.0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex[2].x = 1.0; obj.vertex[2].y = 1.0; obj.vertex[2].z = 0.0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex[3].x = 1.0; obj.vertex[3].y = 0.0; obj.vertex[3].z = 0.0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex[4].x = 0.0; obj.vertex[4].y = 0.0; obj.vertex[4].z = 1.0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.vertex[5].x = 0.0; obj.vertex[5].y = 1.0; obj.vertex[5].z = 1.0;&lt;br /&gt;obj.vertex[6].x = 1.0; obj.vertex[6].y = 1.0; obj.vertex[6].z = 1.0;&lt;br /&gt;obj.vertex[7].x = 1.0; obj.vertex[7].y = 0.0; obj.vertex[7].z = 1.0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;//Poligonos formados&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[0].v1 = 0; obj.polygon[0].v2 = 1; obj.polygon[0].v3 = 3;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[1].v1 = 1; obj.polygon[1].v2 = 2; obj.polygon[1].v3 = 3;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[2].v1 = 4; obj.polygon[2].v2 = 5; obj.polygon[2].v3 = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[3].v1 = 5; obj.polygon[3].v2 = 1; obj.polygon[3].v3 = 0;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[4].v1 = 7; obj.polygon[4].v2 = 6; obj.polygon[4].v3 = 4;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[5].v1 = 6; obj.polygon[5].v2 = 5; obj.polygon[5].v3 = 4;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[6].v1 = 3; obj.polygon[6].v2 = 2; obj.polygon[6].v3 = 7;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[7].v1 = 2; obj.polygon[7].v2 = 6; obj.polygon[7].v3 = 7;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[8].v1 = 1;obj.polygon[8].v2 = 5; obj.polygon[8].v3 = 2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[9].v1 = 5;obj.polygon[9].v2 = 6; obj.polygon[9].v3 = 2;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[10].v1 = 4; obj.polygon[10].v2 = 0; obj.polygon[10].v3 = 7;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;obj.polygon[11].v1 = 0; obj.polygon[11].v2 = 3; obj.polygon[11].v3 = 7;&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;Es importante siempre definir los vértices de los polígonos en el mismo sentido, ya sea en el orden de las agujas del reloj o en sentido contrario; pero todos los polígonos deben de ser definidos en el mismo sentido para así poder determinar cual es la cara frontal del polígono.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;p&gt;Como podemos ver, estas clases nos permitirán entonces (con algunos métodos añadidos y algunos otros atributos importantes), modelar cualquier objeto a través de polígonos y vértices. Diseñar un cubo es sencillo, pero ¿cómo modelaríamos un rostro humano o una nave espacial? A través de código sería imposible; esto lo hacemos a través de herramientas de diseño gráfico como 3dMax, Maya, etc. las cuales generan archivos que después podremos importar a nuestro motor para montar esta información en nuestras estructuras de datos; pero eso lo mostraremos más adelante.&lt;/p&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Por ahora es todo, en el post siguiente hablaré un poco sobre la representación de estos modelos en la pantalla 2D.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-6766068443065338998?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/6766068443065338998/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2009/04/introduccion-motores-3d.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/6766068443065338998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/6766068443065338998'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2009/04/introduccion-motores-3d.html' title='Introducción a Motores 3D'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_W8pEFqRX9hU/SheX_uAe-lI/AAAAAAAAABs/qt-zQysqpZQ/s72-c/509587_com_polygonalhead.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-8325382440565573750</id><published>2009-02-19T08:17:00.000-08:00</published><updated>2010-01-18T08:46:23.211-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servidores'/><title type='text'>Servidor PowerEdge no reconoce los discos</title><content type='html'>Me sucedió hace algunos días, días después de haber cambiado de oficina un servidor Dell PowerEdge 1800, que el servidor no me arrancaba. Esto me sucedió justo después de conectar una unidad de backup por medio de un cable SCSI externo.&lt;br /&gt;&lt;br /&gt;Al encender el servidor me mostraba en los mensajes que no reconocía los discos duros. El servidor cuenta con dos discos duros en RAID 1, es decir donde uno es el espejo del otro. Después de intentar un rato, me comuniqué con el soporte de Dell (excelente servicio, por cierto) que me indicó los pasos a seguir para habilitar los discos duros. Al parecer el servidor los había sacado de línea para protegerlos por algún problema que detectó y sencillamente lo que había que hacer era entrar a la herramienta de administración del servidor para ponerlos OnLine de nuevo. Unas vez puestos OnLine los discos revisarían consistencia lo cual tardaría un rato mostrando una luz de color anaranjado y no verde como es lo habitual, pero el Sistema Operativo cargó sin problemas y no había perdida de información.&lt;br /&gt;&lt;br /&gt;El personal de Dell me indicó que el problema se podría haber ocasionado por faltas de actualizaciones en el firmware o por la conexión de algún dispositivo no compatible, debido a que yo le indiqué que había conectado el backup. La unidad de backup estaba conectada al servidor en la oficina anterior así que no era falta de compatibilidad, pero yo insistía en que el problema debió ocasionarse por la instalación de la unidad y no por faltas de actualización.&lt;br /&gt;&lt;br /&gt;Después de revisar bien la conexión me di cuenta que la conexión de unidad de cinta la había instalado mal (en el puerto equivocado de la unidad de cinta), lo que ocasionó problemas en el servidor. Pero al menos pude aprender un par de cositas que de otra forma no lo hubiera hecho.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-8325382440565573750?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/8325382440565573750/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2009/02/servidor-poweredge-no-reconoce-los.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8325382440565573750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/8325382440565573750'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2009/02/servidor-poweredge-no-reconoce-los.html' title='Servidor PowerEdge no reconoce los discos'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-980416312324873527</id><published>2008-10-20T08:57:00.000-07:00</published><updated>2010-01-18T08:46:39.860-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Detalles de Outlook y MSN Messenger al momento de formatear una PC</title><content type='html'>Durante este largo año de trabajo una de las cuestiones que he tenido que hacer bastante, aunque detesto hacerlo, es formatear y formatear computadoras. A pesar de la gran cantidad de veces que me ha tocado hacerlo, cada vez que debo presionar el botón "OK" para responder a la pregunta "¿Está seguro que desea formatear el disco y eliminar todo lo que está en él?" me detengo a pensar si no se me ha olvidado algo.&lt;br /&gt;&lt;br /&gt;Cuando una computadora con Windows XP empieza a funcionar lento, a levantar mensajes de virus que ningun antivirus puede limpiar del todo, que el sistema operativo no arranca, o simplemente a hacer cosas raras, a veces es mejor tomar la decisión de formatearla. Definitivamente se debe intentar todo antes de decidir formatearla, ya que el formateo y reinstalación del sistema operativo puede significar muchas horas de trabajo y conseguir de nuevo todos los programas que la computadora necesita. Pero hay veces en que se han agotado todas las soluciones posibles: limpiar el registro de windows, borrar software malicioso, eliminar todos los virus, reinstalar archivos dañados de Windows, etc... y aun asi la computadora no funciona como debiera.&lt;br /&gt;&lt;br /&gt;Cuando tomamos esa decisión, es importante sacar un respaldo de la computadora para que al momento de reinstalarle todo, el usuario no haya perdido su información y preferiblemente que todo funcione como funcionaba antes... incluyendo el messenger :) ...&lt;br /&gt;&lt;br /&gt;Casi todos los encargados de formatear computadoras sacan respaldo de los documentos importantes, bases de datos, etc., pero con frecuencia se olvida (o se ignora) como sacar respaldo del Outlook y el MSN Messenger. Aunque esta información puede no ser relevante para algunas personas, el hecho de dejarle al usuario la computadora tal como la tenía generará una sensación de agradecimiento y satisfacción en él.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Microsoft Outlook.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Al momento de sacar respaldo de la información de outlook hay tres tipos de información que debemos considerar:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Libreta de direcciones, Calendario, Tareas, Bandeja de entrada, Elementos enviados y Elementos eliminados&lt;/li&gt;&lt;li&gt;Carpetas Archivadas&lt;/li&gt;&lt;li&gt;Direcciones a las que se ha enviado correos&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Hacer un respaldo del buzón principal y las carpetas archivadas es una tarea muy conocida y que no implica mucho problema. Pero si solamente respaldamos la libreta de direcciones, al momento de restaurar el sistema, el usuario preguntará por gran cantidad de direcciones que ya no encuentra.&lt;/p&gt;&lt;p&gt;Microsoft Outlook, además de la libreta de direcciones, mantiene un caché de las direcciones a las cuales les hemos enviado un correo. Es por eso que al momento de escribir una letra en el campo "Para..." cuando estamos redactando un correo electrónico, nos aparece una lista con varias direcciones que empiezan con esa letra. Estas direcciones no son las direcciones de la Libreta de Direcciones (o Contactos) sino del caché del outlook. Estas direcciones se encuentran en la carpeta &lt;em&gt;C:\Documents and Settings\&amp;lt;nombre de usuario&amp;gt;\Datos de programa\Microsoft\Outlook&lt;/em&gt; o &lt;em&gt;C:\Documents and Settings\&amp;lt;nombre de usuario&amp;gt;\Application Data\Microsoft\Outlook&lt;/em&gt; para las versiones Windows en inglés. El archivo que contiene estas direcciones es el archivo con extensión .NK2. Solo necesitamos copiar este archivo y restaurarlo en la carpeta con el mismo nombre al momento de configurar nuevamente el outlook.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MSN Messenger&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generalmente al formatear una computadora perdemos todos nuestros emoticons, background, guiños, etc. que usamos en el msn messenger. Estos archivos podemos moverlos de computadora a computadora sin problema solo necesitamos iniciar sesión en la computadora destino y luego sustituir en la carpeta &lt;em&gt;C:\Documents and Settings\&amp;lt;nombre de usuario&amp;gt;\Configuración local\Datos de programa\Microsoft\Messenger\&amp;lt;dirección de correo electrónico&amp;gt;\ObjectStore&lt;/em&gt; o &lt;em&gt;C:\Documents and Settings\&amp;lt;nombre de usuario&amp;gt;\Local Settings\Application Data\Microsoft\Messenger\&amp;lt;dirección de correo electrónico&amp;gt;\ObjectStore&lt;/em&gt; la carpeta que deseamos, ya sea Bakcgrounds, CustomEmoticons o Winks3 provenientes de la computadora origen. Al momento de formatear una computadora solo necesitamos sacar respaldo de estas carpetas y sustituirlas después de iniciar sesión en el messenger.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-980416312324873527?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/980416312324873527/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2008/10/detalles-de-outlook-y-msn-messenger-al.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/980416312324873527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/980416312324873527'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2008/10/detalles-de-outlook-y-msn-messenger-al.html' title='Detalles de Outlook y MSN Messenger al momento de formatear una PC'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-1048802446527410965</id><published>2008-10-20T08:52:00.000-07:00</published><updated>2008-10-20T08:57:24.578-07:00</updated><title type='text'>De regreso...</title><content type='html'>Después de un año de ausencia, he decidido volver a escribir en el blog.&lt;br /&gt;&lt;br /&gt;Ha sido un año muy cargado de trabajo, lo que me ha impedido avanzar en algunos proyectos personales que tenía, en algunas cosas que quería aprender y definitivamente en actualizar el blog.&lt;br /&gt;&lt;br /&gt;Espero poder retomar el ritmo y escribir más seguido de hoy en adelante...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-1048802446527410965?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/1048802446527410965/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2008/10/de-regreso.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1048802446527410965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1048802446527410965'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2008/10/de-regreso.html' title='De regreso...'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-4043662276497193679</id><published>2007-10-17T16:17:00.000-07:00</published><updated>2009-02-19T08:16:17.776-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Desechando IIS FTP Server por FileZilla 0.9.23</title><content type='html'>&lt;div&gt;&lt;div&gt;Si deseamos instalar un FTP Server en un Windows Server 2003 quizás nuestra primera opción sea el IIS FTP Server ya que viene con el Sistema Operativo y no necesitaremos comprar nada más; pero después de configurar y batallar un poco con él puede ser que uno termine decepcionándose y se decida a utilizar otro programa.&lt;br /&gt;&lt;br /&gt;Un administrador de red esperaría que un FTP Server le permitiera configurar usuarios, grupos de usuarios, carpetas, permisos a éstas, etc. No puedo decir que IIS no lo haga porque sí lo hace, pero de una forma que quizás presente más inconvenientes que ventajas.&lt;br /&gt;&lt;br /&gt;IIS permite 3 tipos de configuración con respecto a los permisos por usuario:&lt;br /&gt;- Sin aislamiento. Todos los usuarios entran a una carpeta raíz común, pueden ver todas las carpetas disponibles y entrar en aquellas a las que tengan permiso.&lt;br /&gt;- Aislamiento basado en carpetas. Hay una carpeta raíz común y cada usuario esta asociado a una subcarpeta.&lt;br /&gt;- Aislamiento basado en Active Directory. La configuración FTP para cada usuario es obtenida a través de Active Directory.&lt;br /&gt;&lt;br /&gt;La primera opción definitivamente será útil para muy pocos administradores de redes. Sirve solamente para redes muy pequeñas con muy pocos clientes y donde la información no es muy confidencial.&lt;br /&gt;&lt;br /&gt;Y aunque las otras dos podrían resolver el problema, la administración es más complicada de lo necesaria, teniendo que utilizar el active directory o comandos especiales para asociar carpetas a los usuarios...en resumen, todo un dolor de cabeza.&lt;br /&gt;&lt;br /&gt;Y aunque se logre hacer funcionar, las 3 opciones presentan una característica que para mi gusto es poco deseable: los usuarios y grupos del FTP Server tienen que ser usuarios y grupos creados en el Sistema Operativo, usuarios del dominio o del servidor.&lt;br /&gt;&lt;br /&gt;Decidí probar con otro programa, el FileZilla Server 0.9.23, es un programa Open Source; lo instalé, lo configuré y en cuestión de 5 minutos había tomado mi decisión: ¡¡Adios IIS!!&lt;br /&gt;&lt;br /&gt;FileZilla cuenta con todas las opciones necesarias para administrar un FTP Server: usuarios, grupos, permisos por carpetas, logs, etc. Todas estas opciones son de fácil uso, amigables y suficientes, al menos para lo que yo necesitaba. Algunos screenshots del software para administración de FileZilla Server:&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5304542148511167074" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 304px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_W8pEFqRX9hU/SZ2E-roYcmI/AAAAAAAAABU/MILQ9g1TxVc/s400/ss1.JPG" border="0" /&gt; &lt;img id="BLOGGER_PHOTO_ID_5304542625534713202" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 285px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_W8pEFqRX9hU/SZ2FacrqHXI/AAAAAAAAABk/3-uqhA41EfY/s400/ss2.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Si has estado buscando un FTP Server gratis y que satisfaga tus necesidades, te recomiendo que pruebes FileZilla Server, a mí me funcionó. Puedes obtenerlo en &lt;a href="http://filezilla-project.org/"&gt;http://filezilla-project.org/&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-4043662276497193679?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/4043662276497193679/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/10/desechando-iis-ftp-server-por-filezilla.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4043662276497193679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/4043662276497193679'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/10/desechando-iis-ftp-server-por-filezilla.html' title='Desechando IIS FTP Server por FileZilla 0.9.23'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_W8pEFqRX9hU/SZ2E-roYcmI/AAAAAAAAABU/MILQ9g1TxVc/s72-c/ss1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-1908011501080383791</id><published>2007-09-24T08:55:00.000-07:00</published><updated>2007-10-16T08:54:53.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Instalar PHP5 con IIS 6</title><content type='html'>Necesitaba el IIS para unas aplicaciones asp que iba a instalar en el servidor, pero estaba a punto de tirar la toalla ya que la configuración del servidor para que corriera PHP5 sobre el IIS 6 se me estaba haciendo imposible. Seguía todos los pasos indicados en todos los sitios de Internet, pero por alguna razón desconocida a mí no me funcionaba. Al intentar ver las páginas en el browser siempre me aparecía: error 500.&lt;br /&gt;&lt;br /&gt;Luego de buscar en varios lados, encontré por fin la respuesta: Mi IIS 6 es una aplicación 64 bit y las dll del php son 32 bit. Hay que correr lo siguiente en la línea de comandos para permitir la corrida de 32-bit:&lt;br /&gt;&lt;br /&gt;cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1&lt;br /&gt;&lt;br /&gt;Esto habilitará ambos modos y el PHP funcionará perfectamente.&lt;br /&gt;&lt;br /&gt;Artículo completo en: &lt;a href="http://www.peterguy.com/php/Install_IIS6.html"&gt;http://www.peterguy.com/php/Install_IIS6.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-1908011501080383791?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/1908011501080383791/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/09/instalar-php5-con-iis-6.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1908011501080383791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1908011501080383791'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/09/instalar-php5-con-iis-6.html' title='Instalar PHP5 con IIS 6'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-5819397378155811243</id><published>2007-08-13T10:08:00.000-07:00</published><updated>2007-10-16T08:52:07.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>Aprendiendo OpenGL</title><content type='html'>En marzo de este año comencé a estudiar sobre algo que siempre había querido aprender: Cómo programar en C para Windows y cómo crear gráficos para juegos y cosas similares. Empecé a leer bastante sobre estos temas y después de ver varios ejemplos y tutoriales decidí hacer mis primeras pruebas para un motor 3D.&lt;br /&gt;&lt;br /&gt;Mi objetivo final es hacer un motor que en base a una serie de archivos pueda crear un mundo 3D por el que el usuario se pueda mover libremente y que pueda servir como base para la creación de juegos. Necesito una herramienta para crear los objetos, unirlos entre si, agregarlos en el mundo y desplegarlos de manera correcta.&lt;br /&gt;&lt;br /&gt;Desde abril de este año dejé tirado todo esto y hasta ahorita decido retomarlo. Pongo aquí algunos screenshots de lo que hice en abril:&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5098245771990938642" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_W8pEFqRX9hU/RsCbhJkoNBI/AAAAAAAAAAM/LOnF97YXoZE/s320/Dibujo1.JPG" border="0" /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5098245956674532386" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_W8pEFqRX9hU/RsCbr5koNCI/AAAAAAAAAAU/EiaVblzoFew/s320/Dibujo2.JPG" border="0" /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5098246253027275826" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_W8pEFqRX9hU/RsCb9JkoNDI/AAAAAAAAAAc/TD2OuFsNZHg/s320/Dibujo3.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Lo hice en C utilizando DevC++ y me sirvió de base principalmente los tutoriales para un simulador espacial en &lt;a href="http://www.spacesimulator.net/tutorials.html"&gt;http://www.spacesimulator.net/tutorials.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora que lo he retomado, pienso hacerlo orientado a objetos en C++ y comenzar a hacer ya en serio el motor 3D. Cuando esté más empapado del tema haré un post con toda la teoría detrás de todo esto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-5819397378155811243?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/5819397378155811243/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/aprendiendo-opengl.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5819397378155811243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5819397378155811243'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/aprendiendo-opengl.html' title='Aprendiendo OpenGL'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_W8pEFqRX9hU/RsCbhJkoNBI/AAAAAAAAAAM/LOnF97YXoZE/s72-c/Dibujo1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-3385828228409005674</id><published>2007-08-08T08:41:00.002-07:00</published><updated>2007-10-16T08:50:44.115-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Base de Datos'/><title type='text'>Olvidaste sacar el backup de postgres!!</title><content type='html'>Puede ser que alguna vez te suceda que has olvidado sacar el backup de tu base de datos en postgreSQL y sucede algo trágico como que se arruina el disco, el Sistema Operativo no arranca, o se te venció la licencia de tu Windows pirateado :P, etc.&lt;br /&gt;&lt;br /&gt;Ya no hay manera de entrar al SO y sacar un backup de la base de datos, ¿cómo hacer para recuperar la información?&lt;br /&gt;&lt;br /&gt;Si logras recuperar la subcarpeta data almacenada en la carpeta de Postgres (%Program Files%\PostgreSQL\8.0) entonces todavía tienes tu información. No es tan sencillo como instalar postgres y cambiar esta carpeta, puede ser que te pases horas intentando resolverlo de esa forma (yo lo hice); pero el procedimiento es sencillo:&lt;br /&gt;&lt;br /&gt;1) Copia la carpeta data que recuperaste en cualquier lado.&lt;br /&gt;2) Instala PostgreSQL&lt;br /&gt;3) Durante el proceso de instalación en la ventana "Installation Options" selecciona "Data Directory", luego presion el botón "Browse" y busca la carpeta que copiaste.&lt;br /&gt;4) En la ventana "Initialize data cluster" desmarca la opción "initialize data cluster"&lt;br /&gt;5) Prosigue con la instalación, reinicia y listo.&lt;br /&gt;&lt;br /&gt;Eso resolverá tu problema y tus datos estarán de vuelta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-3385828228409005674?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/3385828228409005674/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/olvidaste-sacar-el-backup-de-postgres.html#comment-form' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3385828228409005674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3385828228409005674'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/olvidaste-sacar-el-backup-de-postgres.html' title='Olvidaste sacar el backup de postgres!!'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-3698078420507319433</id><published>2007-08-03T10:07:00.000-07:00</published><updated>2007-10-16T08:52:17.331-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Base de Datos'/><title type='text'>Conexión de PHP 5 con SQL Server</title><content type='html'>Decidí dejar el IIS que viene en el SBS 2003 e instalé Apache 2.0.59 para el sitio web de la empresa. Dado que las páginas serían creadas dinámicamente decidi utilizar PHP 5 y una base de datos SQL Server 2000 con Service Pack 4.&lt;br /&gt;&lt;br /&gt;Instalé el PHP e hice todas las configuraciones para que funcionara con el Apache. No es muy complicado, siguiendo las instrucciones que vienen con el PHP se puede hacer sin problemas. Pero a la hora de hacer la conexión con SQL Server no funcionó, incluso siguiendo las instrucciones del PHP.&lt;br /&gt;&lt;br /&gt;Cambié el archivo php.ini, habilitando la linea&lt;br /&gt;&lt;br /&gt;extension = php_mssql.dll&lt;br /&gt;&lt;br /&gt;y nada. Revisé mi configuración de apache, de php, de SQL...todo parecía estar bien. Luego de mucho intentar sin éxito un amigo me dió la respuesta: uno de los archivos del php viene malo. Me mandó el ntwdblib.dll, lo sustituí por el que tenía y listo, la pagina funciona perfectamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-3698078420507319433?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/3698078420507319433/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/conexin-de-php-5-con-sql-server.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3698078420507319433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/3698078420507319433'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/conexin-de-php-5-con-sql-server.html' title='Conexión de PHP 5 con SQL Server'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-2598818138056969119</id><published>2007-08-01T11:55:00.000-07:00</published><updated>2007-10-16T08:54:53.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Límite de Microsoft Exchange Database</title><content type='html'>Cuando todo está funcionando en tu red de manera normal y los usuarios se encuentran contentos por el servicio, surge uno de esos problemas que no tienes ni idea de dónde surgió ni mucho menos como solucionarlo.&lt;br /&gt;&lt;br /&gt;Tengo un servidor de dominio con Microsoft Windows SBS 2003. Se que algunos odian Microsoft, pero a veces es necesario manejar sus productos para desenvolverse en algunos sectores del mercado, ... además, algunos de sus productos no son tan malos como se piensa. Pues, SBS 2003 trae Exchange Server que es un servidor de correo. Yo lo tengo configurado, de forma tal que los correos bajan a las PCs desde el servidor de correos externo provisto por el ISP; luego, estos correos son copiados en el Exchange para mantener un backup en caso de ser necesario y además facilita la reubicación de un usuario a una PC distinta o incluso para manejar sus correos en una PC y su laptop personal. Tengo también configurado el Exchange para la salida de los correos a través de SMTP y para manejar el correo interno.&lt;br /&gt;&lt;br /&gt;De repente los usuarios reportan que no tienen correo interno y que no pueden enviar correos. Reviso el Exchange y en efecto, el Almacén del Buzón está caído; intento levantar el proceso y arranca, pero unos cuantos segundos está caído nuevamente. El error se debe a un &lt;a href="http://support.microsoft.com/kb/828070/es"&gt;límite de tamaño para la base de Datos de Microsoft Exchange Standard Edition 2003&lt;/a&gt;. Al llegar a 16 GB el servicio se cae y no permite almacenar más correos.&lt;br /&gt;&lt;br /&gt;Encontré tres soluciones para este problema:&lt;br /&gt;- Comprar el Enterprise Edition que no tiene límite en el tamaño de la base de datos.&lt;br /&gt;- Realizar un ajuste en el registro que permite aumentar el tamaño de la base de datos temporalmente para limpiarla de aquella información que ya no se necesita.&lt;br /&gt;- Actualizar al Service Pack2 que puede llegar a tener un límite de 75 GB.&lt;br /&gt;&lt;br /&gt;Probé las dos últimas opciones y funcionan perfectamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-2598818138056969119?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/2598818138056969119/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/lmite-de-microsoft-exchange-database.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2598818138056969119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/2598818138056969119'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/lmite-de-microsoft-exchange-database.html' title='Límite de Microsoft Exchange Database'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-5982681402156031252</id><published>2007-08-01T10:02:00.000-07:00</published><updated>2007-10-16T08:54:53.150-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2003'/><title type='text'>Microsoft Terminal Server</title><content type='html'>He estado acostumbrado al Telnet de Unix desde que soy un estudiante; pero jamás me había tocado trabajar con una herramienta de Microsoft para realizar algo similar al Telnet: el Microsoft Terminal Server...&lt;br /&gt;&lt;br /&gt;Después de mucho tiempo de luchar intentando configurar este software en Microsoft Windows SBS 2003 para permitir la conexión remota de usuarios a una aplicación de negocios, por fin logré hacerlo funcionar. El único problema es que solamente permitía el acceso remoto de 1 o 2 usuarios simultáneamente, y las necesidades de la empresa eran de 7 a 10 personas trabajando en distintos lugares durante todo el día :(...&lt;br /&gt;&lt;br /&gt;Me di cuenta (algo que puede parece obvio pero no para mí que era un ignorante en la materia), que necesitaba comprar licencias por cada usuario que se iba a conectar al Terminal Server...típico de Microsoft...&lt;br /&gt;&lt;br /&gt;Pues mandé a comprar las licencias...y me llevo otra sorpresa: no hay manera de introducir estas licencias en el servidor!!, todos los métodos fallaban...hasta incluso después de platicar más de 2 horas con personal de Microsoft fue imposible instalarlas.&lt;br /&gt;&lt;br /&gt;Después de mucho buscar respuestas y de un malestar creciente por parte de la gerencia de la empresa...encontré un pequeño pero grandioso artículo en las páginas de Microsoft: &lt;a href="http://support.microsoft.com/kb/828056/es"&gt;Small Business Server 2003 no soporta Terminal Server&lt;/a&gt;!!!&lt;br /&gt;&lt;br /&gt;Conseguí un Windows Server 2003 para probarlo y...asunto resuelto!!, algo aparentemente sencillo pero que me costó semanas darme cuenta, pedí la licencia lo instalé y listo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-5982681402156031252?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/5982681402156031252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/microsoft-terminal-server.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5982681402156031252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/5982681402156031252'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/microsoft-terminal-server.html' title='Microsoft Terminal Server'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4705850358912941179.post-1401282863582794027</id><published>2007-08-01T08:44:00.000-07:00</published><updated>2007-08-01T09:01:12.497-07:00</updated><title type='text'>First Post</title><content type='html'>He decidido comenzar a escribir acerca de las cosas que aprendo o intento aprender relacionadas con los Sistemas Computacionales.&lt;br /&gt;&lt;br /&gt;Pienso escribir sobre hardware, lenguajes de programación, aplicaciones comerciales o cualquier otra área con la que me toque luchar y ya sea que consiga o no resultados exitosos, brindar un log que pueda servir a aquellos que visiten este sitio o incluso a mí mismo en el futuro cuando ya se me haya olvidado cómo hacer algo :P.&lt;br /&gt;&lt;br /&gt;Los primeros posts serán de cosas con las que he estado trabajando en los últimos meses (no todas tan recientes), y que dado lo díficil de encontrar respuestas acertadas en la Web he decidido resumir toda la información relacionada que me ha servido a mí...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4705850358912941179-1401282863582794027?l=cevallejo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cevallejo.blogspot.com/feeds/1401282863582794027/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://cevallejo.blogspot.com/2007/08/first-post.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1401282863582794027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4705850358912941179/posts/default/1401282863582794027'/><link rel='alternate' type='text/html' href='http://cevallejo.blogspot.com/2007/08/first-post.html' title='First Post'/><author><name>Carlos E. Vallejo</name><uri>http://www.blogger.com/profile/02436362211172252660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
