<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkQFSXw9eSp7ImA9WhRaFEU.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767</id><updated>2012-02-17T13:05:18.261+01:00</updated><category term="direcciones ip" /><category term="SQL" /><category term="html5" /><category term="bugs" /><category term="boton me gusta" /><category term="redes sociales" /><category term="contraseñas" /><category term="curiosidades" /><category term="windows 7" /><category term="queries" /><category term="iphone" /><category term="números romanos" /><category term="css" /><category term="posicionamiento" /><category term="ttfb" /><category term="symbian" /><category term="tutoriales" /><category term="rss" /><category term="spam" /><category term="driver sql server php" /><category term="consultas sql" /><category term="listados" /><category term="errores" /><category term="sistemas operativos" /><category term="blogs" /><category term="office 2010" /><category term="backup" /><category term="facebook" /><category term="emails" /><category term="centos" /><category term="MySQL" /><category term="POO" /><category term="deprecadas" /><category term="monetizar" /><category term="detalles" /><category term="servicios google" /><category term="formularios" /><category term="comandos" /><category term="críticas" /><category term="optimización" /><category term="bases de datos" /><category term="XML" /><category term="certificados seguridad" /><category term="wordpress" /><category term="pdf" /><category term="yast" /><category term="yui compressor" /><category term="windows 8" /><category term="1and1" /><category term="android" /><category term="tablets" /><category term="html" /><category term="librerías php" /><category term="repositorios" /><category term="móviles" /><category term="tweets" /><category term="ssl" /><category term="marketing" /><category term="T-SQL" /><category term="plugins" /><category term="zend" /><category term="tuenti" /><category term="subversion" /><category term="google" /><category term="restaurar" /><category term="reportes" /><category term="navegadores" /><category term="javascript" /><category term="discos duros" /><category term="manuales" /><category term="apple" /><category term="SQL Server" /><category term="AJAX" /><category term="benchmark" /><category term="windows server" /><category term="triggers" /><category term="rpm" /><category term="scripts shell linux" /><category term="fotografía" /><category term="boletín electrónico" /><category term="frameworks" /><category term="fraudes online" /><category term="ios" /><category term="internet" /><category term="script php" /><category term="disparadores" /><category term="windows" /><category term="firewall" /><category term="actualizaciones" /><category term="tortoise svn" /><category term="redes" /><category term="managment studio" /><category term="hardware" /><category term="linux" /><category term="apache" /><category term="instalaciones" /><category term="configuraciones" /><category term="criptografía" /><category term="copias de seguridad" /><category term="geocoding" /><category term="seguridad internet" /><category term="opensuse" /><category term="funciones fecha" /><category term="php" /><category term="nivel aislamiento" /><category term="photoshop" /><category term="historial web" /><category term="ssh" /><category term="programas" /><category term="+1" /><category term="herramientas" /><category term="php clases" /><category term="google chrome" /><category term="icloud" /><category term="jquery" /><category term="paralelismo" /><category term="antivirus" /><category term="captcha" /><category term="blogger" /><category term="SEO" /><category term="minify" /><category term="buscadores" /><category term="adsense" /><category term="twitter" /><category term="nube" /><category term="microsoft" /><category term="chromium" /><category term="cronología" /><category term="htaccess" /><category term="expresiones regulares" /><category term="wamp server" /><category term="anuncios" /><title>Script Inside</title><subtitle type="html">Blog sobre informática, programación en PHP y javascript utilizando frameworks como jquery. Bases de datos MySQL y SQL Server. Configuración de servidores CentOS y comandos Linux. Marketing y rentabilidad web. Herramientas de Google.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://scriptinside.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://scriptinside.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>229</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ScriptInside" /><feedburner:info uri="scriptinside" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>ScriptInside</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DEcERHg-cCp7ImA9WhRaFEo.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-7818852444793146945</id><published>2012-02-17T11:53:00.001+01:00</published><updated>2012-02-17T11:53:25.658+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-17T11:53:25.658+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="navegadores" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><title>Octubre 2011: Cuotas de mercado en internet</title><content type="html">&lt;p&gt;He encontrado este interesante artículo en internet sobre las &lt;a href="http://nosolotecnologia.com/2011/11/cuotas-de-mercado-octubre-2011/"&gt;cuotas de mercado basadas en las conexiones a internet y no en el número de dispositivos&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/5786062601235309767-7818852444793146945?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VS4FDeiXXduTK5rcxMZKzwAfH_w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VS4FDeiXXduTK5rcxMZKzwAfH_w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VS4FDeiXXduTK5rcxMZKzwAfH_w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VS4FDeiXXduTK5rcxMZKzwAfH_w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/u8c4485cIsk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=7818852444793146945&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7818852444793146945?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7818852444793146945?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/u8c4485cIsk/octubre-2011-cuotas-de-mercado-en.html" title="Octubre 2011: Cuotas de mercado en internet" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/02/octubre-2011-cuotas-de-mercado-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcFQ3s7fSp7ImA9WhRaFEo.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-2338987594768066129</id><published>2012-02-17T11:20:00.001+01:00</published><updated>2012-02-17T11:20:12.505+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-17T11:20:12.505+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="sistemas operativos" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Analizando Windows 8 Developer Preview</title><content type="html">&lt;p align="justify"&gt;Con la inminente salida el próximo 29 de febrero de &lt;strong&gt;Windows 8 Customer Preview&lt;/strong&gt; (o lo que viene a ser la primera beta de toda la vida) he querido descargarme y probar esta versión para comparar por dónde van a ir los tiros.&lt;/p&gt; &lt;p align="justify"&gt;La impresión general que me da esta versión de Windows 8 no me deja indiferente pero la verdad que en esta ocasión no es para nada positivo, está demasiado orientada al mundo táctil y el ratón incluso a veces puede resultar incómodo de manejar en algunas opciones.&lt;/p&gt; &lt;p align="justify"&gt;La pantalla de inicio está muy incompleta, sin apenas poder personalizarla, el gadget para conectar con Facebook no funciona y el del tiempo no puedo configurarle si me lo muestra en grados Celsius y Fahrenheit. Los RSS tiene solo para agregar una URL con lo que si no te sabes la dirección tendrías que ir a Internet Explorer (ya trae la esperada versión 10) buscarlo y copiarlo luego en esta pantalla, yo personalmente pondría un buscador; tampoco he sido capaz de ordenar los RSS.&lt;/p&gt; &lt;p align="justify"&gt;Estos programas por defecto del menú inicio incluido el enlace de Internet Explorer no se cierran solo vuelves a la pantalla de inicio pulsando el botón Windows del teclado o desplazándote a la esquina inferior izquierda dónde a veces (a mi me falla mucho) cuando pasas el cursor sale un pequeño menú.&lt;/p&gt; &lt;h2 align="justify"&gt;Programas y menú inicio&lt;/h2&gt; &lt;p align="justify"&gt;En esta versión el botón inicio tal y como lo conocemos prácticamente desaparece y no hay un listado de programas instalados lo cual hace muy engorroso el trabajo cuando tienes muchos y quieres acceder a uno no muy frecuente.&lt;/p&gt; &lt;h2 align="justify"&gt;Actualizaciones en Windows 8 Developer Preview&lt;/h2&gt; &lt;p align="justify"&gt;Llama la atención a la hora de hacer una actualización y necesita reiniciar la máquina, ya no salen los molestos mensajes de reiniciar en x tiempo, ahora el sistema te dice que si no lo reinicias en ese momento el mismo lo hará en 2 días.&lt;/p&gt; &lt;h2 align="justify"&gt;Gestor de archivos en Windows 8 Developer Preview&lt;/h2&gt; &lt;p align="justify"&gt;Ahora cuando copias, mueves o borras archivos sale un gráfico mostrándote la velocidad de copiado o borrado, además cuando realizas varias operaciones todas se ejecutan en la misma ventana.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-NKJxZa1NJ9w/Tz4p1yqk2xI/AAAAAAAAHec/eiRJuTmYvUY/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh3.ggpht.com/-pWrfFmXqv0c/Tz4p2qNeTSI/AAAAAAAAHek/M8_Xeh2wZ6U/Sin-t%2525C3%2525ADtulo-1_thumb%25255B1%25255D.jpg?imgmax=800" width="428" height="285"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;En resumen, hay muchas cosas que sé que ya han mejorado en la &lt;strong&gt;Customer Preview&lt;/strong&gt; pero aún así deseo que llegue el 29 de febrero para probarlo personalmente porque por ahora, esta versión de &lt;strong&gt;Windows 8&lt;/strong&gt; no me convence para nada en un entorno de escritorio.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-2338987594768066129?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zoqNo-WRi17WTm91En5Pxj0rha0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zoqNo-WRi17WTm91En5Pxj0rha0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zoqNo-WRi17WTm91En5Pxj0rha0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zoqNo-WRi17WTm91En5Pxj0rha0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/QBJ6_pKS-lY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=2338987594768066129&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2338987594768066129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2338987594768066129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/QBJ6_pKS-lY/analizando-windows-8-developer-preview.html" title="Analizando Windows 8 Developer Preview" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-pWrfFmXqv0c/Tz4p2qNeTSI/AAAAAAAAHek/M8_Xeh2wZ6U/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/02/analizando-windows-8-developer-preview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ERXg5cSp7ImA9WhRbFUw.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-3764603449181219624</id><published>2012-02-06T10:00:00.000+01:00</published><updated>2012-02-06T10:00:04.629+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-06T10:00:04.629+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="plugins" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="cronología" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="driver sql server php" /><title>Cronología del driver de Microsoft para SQL Server y PHP</title><content type="html">&lt;p align="justify"&gt;El 29 de julio de 2008 Microsoft anuncia la salida de su &lt;em&gt;driver SQL Server 2005 para PHP&lt;/em&gt; en su primera versión, se denominó &lt;strong&gt;Microsoft SQL Server 2005 Driver for PHP v1.0&lt;/strong&gt; y en propias palabras del responsable de Microsoft en el &lt;a href="http://blogs.msdn.com/b/sqlphp/"&gt;blog de este driver&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;¡Es un placer para mí anunciar que la versión 1.0 de &lt;em&gt;Microsoft SQL Server 2005 Driver para PHP&lt;/em&gt; ha sido publicada! Este lanzamiento marca un paso más en el continuo compromiso de Microsoft con la interoperabilidad (…) Hemos recorrido un largo camino desde la inicial CTP (&lt;a href="http://blogs.msdn.com/b/sqlphp/archive/2010/06/14/what-is-a-community-technology-preview-ctp.aspx"&gt;Community Technology Preview&lt;/a&gt;) en octubre de 2007 (…)&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Aquí comenzaba una nueva era para la conexión a bases de datos &lt;em&gt;SQL Server&lt;/em&gt; desde páginas web programadas con PHP, antes de este lanzamiento la conexión era hecha por una librería de PHP basada en ODBC la cual tenía las limitaciones propias de este protocolo y una lentitud nada comparable a la velocidad del nuevo driver de Microsoft.&lt;/p&gt; &lt;p align="justify"&gt;Los &lt;a href="http://msdn.microsoft.com/es-es/library/cc296170(v=sql.90).aspx"&gt;requisitos para instalar este driver en un servidor web&lt;/a&gt; no han cambiado desde la versión 1.0 hasta la más actual, salvo por novedades que veremos más adelante.&lt;/p&gt; &lt;p align="justify"&gt;El primer cambio importante en la vida de este controlador se da con la versión 1.1 (&lt;strong&gt;SQL Server Driver for PHP 1.1&lt;/strong&gt;) lanzada públicamente el 8 de octubre de 2009, más de un año del lanzamiento de la versión inicial.&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Este lanzamiento marca un hito muy importante en nuestra continua búsqueda de la interoperabilidad, mientras que también proporciona soporte para la versión de PHP 5.3. Este controlador permitirá a los desarrolladores construir aplicaciones PHP tanto para bases de datos relacionales como &lt;em&gt;SQL Server&lt;/em&gt;, como bases de datos &lt;em&gt;SQL Azure&lt;/em&gt;. Hay algunas mejoras de rendimiento clave, así como nuevas características como el soporte para codificación UTF-8 y los conjuntos de resultados desplazables.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Con estos cambios el equipo de desarrollo de este controlador recibe el primer apoyo abierto por parte de la comunidad de PHP al integrarse en el sistema de foros gratuitos &lt;a href="http://es.wikipedia.org/wiki/PhpBB"&gt;phpBB&lt;/a&gt; en su versión 3.0.7.&lt;/p&gt; &lt;p align="justify"&gt;Con menos de un año de diferencia otro hito marca el camino de este controlador, la compatibilidad con &lt;a href="http://es.wikipedia.org/wiki/PDO"&gt;PHP Data Objects&lt;/a&gt; (PDO), esta mejora nos llega con la versión 2.0 (&lt;strong&gt;Microsoft Drivers for PHP for SQL Server 2.0&lt;/strong&gt;) el 5 de agosto de 2010.&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Lo más destacado de este comunicado es la adición del driver PDO_SQLSRV, que agrega soporte para PHP Data Objects (PDO). La comunidad de PHP ha señalado que PDO es el futuro, ya que elimina la complejidad de acceso a datos en aplicaciones PHP, permitiendo a los desarrolladores centrar sus esfuerzos en las propias aplicaciones en lugar de base de datos de código específico. Proporcionar el driver PDO_SQLSRV permite a populares aplicaciones PHP utilizar este estilo de acceso a datos para interactuar con bases de datos SQL Server de Microsoft y hacer más fácil a los desarrolladores de PHP tomar ventaja de la probada trayectoria de SQL Server y aprovechar funciones como Reporting Services de SQL Server y las capacidades de Business Intelligence. Además de acceso a SQL Server, los dos drivers (SQLSRV y PDO_SQLSRV) también permiten a los desarrolladores de PHP conectar fácilmente y utilizar la oferta de Microsoft con base de datos SQL Azure y disfrutar de los beneficios de una base de datos relacional confiable y escalable en la nube, así como funcionalidades como la exposición de fuentes OData.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Esta nueva funcionalidad le vale a SQL Server el 26 de enero de 2011 para unirse a las bases de datos soportadas por el &lt;a href="http://es.wikipedia.org/wiki/Drupal"&gt;sistema de gestión de contenidos Drupal&lt;/a&gt; en su versión 7. Los frutos de los cambios realizados en el driver inicial estaban dando frutos y cada vez la comunidad PHP estaba más volcada a trabajar y probar este proyecto de Microsoft, como es el caso de su &lt;a href="http://pecl.php.net/package/sqlsrv"&gt;publicación dentro de la PHP Extension Community Library&lt;/a&gt; (PECL) el 3 de junio de 2011.&lt;/p&gt; &lt;p align="justify"&gt;El compromiso final de Microsoft con la comunidad PHP llegó con la &lt;a href="http://docs.php.net/manual/en/book.sqlsrv.php"&gt;inclusión de los manuales del driver de SQL Server en la página oficial de PHP&lt;/a&gt; el 14 de julio de 2011.&lt;/p&gt; &lt;p align="justify"&gt;El 27 de septiembre el equipo de desarrollo anuncia la salida de la tercera (y actual) versión del driver, cambiando su nombre a &lt;strong&gt;Microsoft Drivers 3.0 for PHP for SQL Server&lt;/strong&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Los principales aspectos de esta versión incluyen: soporte para las nuevas características de SQL Server 2012 y el almacenamiento de consultas con buffers. Los&amp;nbsp; características incluyen soporte para conectividad&amp;nbsp; AlwaysOn, que abarca el apoyo para la conmutación por error de varias subredes, la conectividad de grupos de disponibilidad de AlwaysOn y enrutamiento de sólo lectura, y el soporte para SQL Server Express LocalDB.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Con este recorrido solo quedaba una parte escabrosa en la vida del driver y es su instalación en sistemas Linux, es por ello que el 13 de octubre Microsoft anuncia públicamente que estaba trabajando en una versión ODBC para su driver instalable en sistemas Linux cuya primera versión en estado CTP fue lanzada el 28 de noviembre bajo el nombre de &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=28160"&gt;Microsoft® SQL Server® ODBC Driver for Linux Community Technology Preview&lt;/a&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;En nuestro continuo compromiso con la interoperabilidad, estamos muy emocionados de anunciar la disponibilidad de una versión preliminar del controlador de &lt;em&gt;SQL Server ODBC para Linux&lt;/em&gt;. Este lanzamiento permitirá a los desarrolladores acceder de forma nativa a Microsoft SQL Server en los sistemas operativos Linux.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;El ultimo apoyo lo han recibido recientemente por parte del &lt;a href="http://es.wikipedia.org/wiki/Joomla"&gt;sistema de gestión de contenidos y framework para aplicaciones web Joomla&lt;/a&gt; en su versión 2.5 el pasado 28 de enero de 2012.&lt;/p&gt; &lt;p align="justify"&gt;Aquí os dejo una imagen que representa la cronología en la vida del &lt;strong&gt;driver para SQL Server y PHP de Microsoft&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-YDs_16BZZv8/TywQMt_atLI/AAAAAAAAHeM/boP7qjpVh4I/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B6%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh6.ggpht.com/-6hWYL9QOcDk/TywQNP31AnI/AAAAAAAAHeQ/WVZY8IReX38/Sin-t%2525C3%2525ADtulo-1_thumb%25255B4%25255D.jpg?imgmax=800" width="422" height="1019"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;¡Seguiré informando!&lt;/p&gt; &lt;p&gt;Las citas son traducciones libres de algunos párrafos de determinados artículos del blog oficial del &lt;strong&gt;Microsoft Driver para PHP para SQL Server&lt;/strong&gt; enlazado al inicio de este post.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-3764603449181219624?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/phcHldtSKlXBv8UikYWeDlBJ1vU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/phcHldtSKlXBv8UikYWeDlBJ1vU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/phcHldtSKlXBv8UikYWeDlBJ1vU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/phcHldtSKlXBv8UikYWeDlBJ1vU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/4G_z3usPym4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=3764603449181219624&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/3764603449181219624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/3764603449181219624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/4G_z3usPym4/cronologia-del-driver-de-microsoft-para.html" title="Cronología del driver de Microsoft para SQL Server y PHP" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-6hWYL9QOcDk/TywQNP31AnI/AAAAAAAAHeQ/WVZY8IReX38/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B4%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/02/cronologia-del-driver-de-microsoft-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AMQX84eCp7ImA9WhRbEE0.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-4958918391365276538</id><published>2012-01-31T10:23:00.000+01:00</published><updated>2012-01-31T10:23:00.130+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T10:23:00.130+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="comandos" /><category scheme="http://www.blogger.com/atom/ns#" term="certificados seguridad" /><category scheme="http://www.blogger.com/atom/ns#" term="instalaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="criptografía" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="navegadores" /><category scheme="http://www.blogger.com/atom/ns#" term="ssl" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="seguridad internet" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>Crear certificados digitales en Windows</title><content type="html">&lt;p align="justify"&gt;Este manual se podría decir que es una actualización del artículo wiki &lt;a href="http://chuwiki.chuidiang.org/index.php?title=Crear_e_instalar_certificados_digitales_en_Apache_HttpServer"&gt;crear e instalar certificados digitales en Apache HttpServer&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Lo primero que debemos hacer es &lt;a href="http://www.slproweb.com/products/Win32OpenSSL.html"&gt;descargarnos la distribución de OpenSSL para Windows&lt;/a&gt;. Para los que no lo sepan y parafraseando a la Wikipedia decir que &lt;a href="http://www.openssl.org"&gt;OpenSSL&lt;/a&gt; es un software open source para libre descarga que incluye un paquete de herramientas de administración y bibliotecas relacionadas con la criptografía, que suministran funciones criptográficas a otros paquetes como OpenSSH y navegadores web para acceso seguro a sitios con el protocolo HTTPS, herramientas que ayudan al sistema a implementar el Secure Sockets Layer (SSL).&lt;/p&gt; &lt;p align="justify"&gt;Una vez que hemos descargar OpenSSL debemos ejecutar el Símbolo del sistema y navegar hasta la ruta de instalación de este programa. Esto es muy importante porque de hacerlo desde otras carpetas nos puede dar un error del tipo &lt;em&gt;'openssl' is not recognized as an internal or external command, operable program or batch file&lt;/em&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Una vez en el símbolo del sistema escribimos:&lt;/p&gt; &lt;p align="justify"&gt;C:\&amp;gt;cd OpenSSL-Win32&lt;br&gt;C:\OpenSSL-Win32&amp;gt;cd bin&lt;/p&gt; &lt;p align="justify"&gt;Nota: en mi caso he instalado OpenSSL en el directorio C:\OpenSSL-Win32 y el ejecutable siempre se encuentra en el subdirectorio bin.&lt;/p&gt; &lt;p align="justify"&gt;Ahora debemos &lt;strong&gt;crear una par de claves para el servidor&lt;/strong&gt;. Una será la clave privada y la otra la pública.&lt;/p&gt; &lt;p align="justify"&gt;C:\OpenSSL-Win32\bin&amp;gt;openssl genrsa -des3 -out server.key 1024 -config "C:\OpenSSL-Win32\bin\openssl.cfg"&lt;/p&gt; &lt;p align="justify"&gt;Muy importante la opción config porque en la instalación para Windows el archivo de configuración se encuentra en esta ruta y no donde lo busca el comando, no es necesario especificarlo en todos los comandos de este tutorial, solo en los que lo pongo de manera explícita, de no encontrarlo produce un error grabe del tipo &lt;em&gt;Unable to load config info from /usr/local/ssl/openssl.cnf&lt;/em&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Este comando produce el fichero server.key con las dos claves como salida. Durante el proceso nos pedirá una clave para encriptar ese fichero, de forma que las claves no sean visibles.&lt;/p&gt; &lt;p align="justify"&gt;WARNING: can't open config file: /usr/local/ssl/openssl.cnf&lt;br&gt;Loading 'screen' into random state - done&lt;br&gt;Generating RSA private key, 1024 bit long modulus&lt;br&gt;.........++++++&lt;br&gt;...................++++++&lt;br&gt;e is 65537 (0x10001)&lt;br&gt;Enter pass phrase for server.key:&lt;br&gt;Verifying - Enter pass phrase for server.key:&lt;/p&gt; &lt;p align="justify"&gt;El siguiente paso es &lt;strong&gt;crear una solicitud de certificado&lt;/strong&gt;. &lt;/p&gt; &lt;p align="justify"&gt;C:\OpenSSL-Win32\bin&amp;gt;openssl req -new -key server.key -out server.csr -config "C:\OpenSSL-Win32\bin\openssl.cfg"&lt;/p&gt; &lt;p align="justify"&gt;Aún escribiendo la ruta del archivo de configuración recibimos el &lt;em&gt;WARNING: can't open config file: /usr/local/ssl/openssl.cnf&lt;/em&gt;, omitirlo esto no importa.&lt;/p&gt; &lt;p align="justify"&gt;En este comando anterior debemos indicar cual es nuestro fichero de claves generado en el paso anterior y dar los datos que queremos que aparezcan en el certificado.&lt;/p&gt; &lt;p align="justify"&gt;Enter pass phrase for server.key:&lt;br&gt;Loading 'screen' into random state - done&lt;br&gt;You are about to be asked to enter information that will be incorporated into your certificate request.&lt;br&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br&gt;There are quite a few fields but you can leave some blank for some fields there will be a default value, if you enter '.', the field will be left blank.&lt;br&gt;-----&lt;br&gt;Country Name (2 letter code) [AU]:ES&lt;br&gt;State or Province Name (full name) [Some-State]:MADRID&lt;br&gt;Locality Name (eg, city) []:MADRID&lt;br&gt;Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMPRESA&lt;br&gt;Organizational Unit Name (eg, section) []:DESARROLLO&lt;br&gt;Common Name (eg, YOUR name) []:dominio.es&lt;br&gt;Email Address []:desarrollo@dominio.es&lt;/p&gt; &lt;p align="justify"&gt;Please enter the following 'extra' attributes to be sent with your certificate request&lt;br&gt;A challenge password []: clave&lt;br&gt;An optional company name []:Empresa SL&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Cuando instalemos todo esto en nuestro servidor Apache, vamos a poner el fichero de claves que hemos generado server.key. Puesto que está encriptado, cuando Apache arranque nos pedirá la clave del fichero. Esto es bastante incómodo sobre todo si pretendemos que Apache arranque automáticamente al arrancar el servidor. Por ello y aunque supone un riesgo, desencriptamos el fichero para ponerlo más adelante donde Apache vaya a usarlo.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Primero nos creamos una copia de seguridad del archivo server.key por lo que pueda pasar:&lt;/p&gt; &lt;p align="justify"&gt;C:\OpenSSL-Win32\bin&amp;gt;move server.key server.key.seguro&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 file(s) moved.&lt;/p&gt; &lt;p align="justify"&gt;El comando para &lt;strong&gt;desencriptar el server.key&lt;/strong&gt; es el siguiente:&lt;/p&gt; &lt;p align="justify"&gt;C:\OpenSSL-Win32\bin&amp;gt;openssl rsa -in server.key.seguro -out server.key&lt;br&gt;WARNING: can't open config file: /usr/local/ssl/openssl.cnf&lt;br&gt;Enter pass phrase for server.key.seguro:&lt;br&gt;writing RSA key&lt;/p&gt; &lt;p align="justify"&gt;Una vez hecha la solicitud dos pasos antes, toca el momento de firmarla aunque en nuestro caso lo que haremos será autofirmar el certificado con nuestro propio certificado. &lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-oP5mmdfbTq0/TyLPDx1BI0I/AAAAAAAAHd0/bdcOZGwDVOg/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B11%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh4.ggpht.com/-Q84Klk8Nkxc/TyLPEWb04sI/AAAAAAAAHd8/u_EqKoOfVRc/Sin-t%2525C3%2525ADtulo-1_thumb%25255B7%25255D.jpg?imgmax=800" width="558" height="284"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Esta es la opción más sencilla pero tened en cuenta que los navegadores protestarán:&lt;/p&gt; &lt;p align="justify"&gt;C:\OpenSSL-Win32\bin&amp;gt;openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt&lt;br&gt;WARNING: can't open config file: /usr/local/ssl/openssl.cnf&lt;br&gt;Loading 'screen' into random state - done&lt;br&gt;Signature ok&lt;br&gt;subject=/C=ES/ST=MADRID/L=MADRID/O=EMPRESA/OU=DESARROLLO/CN=dominio.es/emailAddress=desarrollo@dominio.es&lt;br&gt;Getting Private key&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;El -days 365 indica el tiempo de validez del certificado. La opción -signkey server.key es la que indica que el certificado debe ir autofirmado usando el fichero de claves server.key que generamos en el primer paso. Nuestro fichero de certificado será server.crt.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Si lo que queremos es firmarlo con nuestro propio certificado de autoridad de confianza entonces debemos consultar el manual original que viene muy bien explicado, teniendo en cuenta el comando config de &lt;strong&gt;OpenSSL&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;De esta forma ya tenemos nuestros archivos con el certificado digital que hemos creado, en el manual de origen que os he puesto al principio de la web vienen muy bien explicados los pasos para instalarlo en un servidor web como apache.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-4958918391365276538?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0noAroay6TC4TBLYpQsknU9uo9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0noAroay6TC4TBLYpQsknU9uo9o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0noAroay6TC4TBLYpQsknU9uo9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0noAroay6TC4TBLYpQsknU9uo9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/WXmHP2f0ZG8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=4958918391365276538&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4958918391365276538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4958918391365276538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/WXmHP2f0ZG8/crear-certificados-digitales-en-windows.html" title="Crear certificados digitales en Windows" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-Q84Klk8Nkxc/TyLPEWb04sI/AAAAAAAAHd8/u_EqKoOfVRc/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B7%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/01/crear-certificados-digitales-en-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MAQXk8eCp7ImA9WhRUGUw.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-1610288776884047818</id><published>2012-01-30T10:24:00.000+01:00</published><updated>2012-01-30T10:24:00.770+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-30T10:24:00.770+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="managment studio" /><category scheme="http://www.blogger.com/atom/ns#" term="instalaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="firewall" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="windows server" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="programas" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>SQL Server Named Pipes Provider error: 40</title><content type="html">&lt;p align="justify"&gt;Las &lt;strong&gt;configuraciones de SQL Server para conexiones remotas&lt;/strong&gt; dependen de muchos factores que ya he comentado en este blog en el post &lt;a href="http://scriptinside.blogspot.com/2011/02/problemas-en-el-acceso-remoto-sql.html"&gt;problemas en el acceso remoto a SQL Server&lt;/a&gt;, el tema es que en ese post hablé de los problemas de login por contraseñas incorrectas, usuarios inactivos o tipo de autentificación erróneas, todos estos casos posibles pero no tienen nada que ver con el error que da título a este post de hoy. Este error se debe a 2 cosas fundamentales:&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;una mala configuración del firewall de windows&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;una mala configuración de sql server para tratar las conexiones remotas&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;Son 2 factores muy generales pero los voy a tratar con el mayor grado de especificación posible.&lt;/p&gt; &lt;p align="justify"&gt;El entorno de trabajo de este post es en un Windows 2008 R2 Data Center Edition y un SQL Server 2008 R2 SP1. Mi objetivo final es conectarme remotamente a mi SQL Server por IP.&lt;/p&gt; &lt;p align="justify"&gt;El mensaje de error completo es el siguiente:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;An error has occurred while establishing a connection to the server.&amp;nbsp; When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 1326)&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Lo primero será &lt;strong&gt;comprobar la configuración de firewall&lt;/strong&gt; que básicamente es permitir la entrada de conexiones por el puerto 1433 por TCP y el puerto 1434 por UDP. Esto es una configuración por puertos pero muchas veces (como ha sido mi caso) SQL Server se instala para escuchar por puertos dinámicos, en este caso lo que debemos permitir son los programas sqlservr.exe y sqlbrowser.exe.&lt;/p&gt; &lt;p align="justify"&gt;No voy a entrar en como configurar el firewall porque existen muchos cortafuegos y hay miles de tutoriales para permitir conexiones a un programa o a un puerto. Si es el caso del firewall de Windows solo es necesario crear reglas de entrada porque por defecto las de salida están permitidas.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Dónde localizar el sqlservr y el sqlbrowser&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;El sqlservr.exe siempre se encuentra en el directorio de instalación del SQL Server siempre (ya sea un sistema de 64 o 32 bits) en la carpeta: &lt;/p&gt; &lt;p align="justify"&gt;%ProgramFiles%\Microsoft SQL Server\MSSQL10_50.INSTANCIA\MSSQL\Binn\sqlservr.exe&lt;/p&gt; &lt;p align="justify"&gt;El SQL Browser es más complicado porque es siempre un programa de 32 bits, o sea que en sistemas de 64 bits va a estar localizado en %ProgramFiles% (x86), en mi caso se encuentra en:&lt;/p&gt; &lt;p align="justify"&gt;%ProgramFiles% (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe&lt;/p&gt; &lt;p align="justify"&gt;Pero la variante más segura es ir al &lt;em&gt;SQL Server Configuration Manager&lt;/em&gt; que se encuentra en &lt;em&gt;Start&lt;/em&gt; –&amp;gt; &lt;em&gt;All Programs&lt;/em&gt; –&amp;gt; &lt;em&gt;Microsoft SQL Server 2008 R2&lt;/em&gt; –&amp;gt; &lt;em&gt;Configuration Tools&lt;/em&gt; y al abrir la ventana ir a &lt;em&gt;SQL Server Services&lt;/em&gt;, hacer clic derecho sobre el &lt;strong&gt;SQL Server Browser&lt;/strong&gt; elegir Properties &lt;/p&gt; &lt;p align="justify"&gt;Nota: ya que estamos en esta pantalla comprobamos que todos los servicios estén activos (en estado Running)&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-ZSFZNnNjZsA/TyKJGHjIgTI/AAAAAAAAHcE/7ht-pwe4ClI/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh3.ggpht.com/-U4JYj4SCvvw/TyKJGifi0CI/AAAAAAAAHcI/AVZ2zsss1OY/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" width="562" height="262"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;En la pestaña Service de la nueva ventana nos aparece la ruta al archivo en dónde pone Binary Path.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-cQmZ2qil3vI/TyKJHJICPRI/AAAAAAAAHcQ/oUTQizfrj9w/s1600-h/Sin-t%2525C3%2525ADtulo-2%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-2" border="0" alt="Sin-t&amp;iacute;tulo-2" src="http://lh6.ggpht.com/-fXaRI-z26Iw/TyKJHjNFHsI/AAAAAAAAHcY/rL0UEDEJqTI/Sin-t%2525C3%2525ADtulo-2_thumb%25255B2%25255D.jpg?imgmax=800" width="392" height="443"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 align="justify"&gt;Configurar SQL Server para permitir conexiones remotas&lt;/h2&gt; &lt;p align="justify"&gt;Una vez configurado el firewall veamos la configuración del SQL Server, lo primero que hay que &lt;strong&gt;comprobar es si permite conexiones remotas&lt;/strong&gt;, desde el propio Managment Studio clic derecho sobre la instancia y clicamos en properties, y en la nueva ventana buscamos a la derecha la opción connections y vemos que esté marcado el check &lt;em&gt;Allow remote connections to this server&lt;/em&gt;:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-F2UGGQp4al0/TyKJIpEjTNI/AAAAAAAAHcg/dVBLkxdOGxY/s1600-h/Sin-t%2525C3%2525ADtulo-3%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-3" border="0" alt="Sin-t&amp;iacute;tulo-3" src="http://lh5.ggpht.com/-bbiDY1bM1nw/TyKJJPs-_fI/AAAAAAAAHco/A7_gdbp-Wm4/Sin-t%2525C3%2525ADtulo-3_thumb%25255B2%25255D.jpg?imgmax=800" width="563" height="455"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Si no está marcado lo marcamos y con esto en el &lt;em&gt;SQL Server Managment Studio&lt;/em&gt; no tenemos que tocar más nada.&lt;/p&gt; &lt;h2 align="justify"&gt;Comprobar la configuración TCP en el SQL Server para permitir conexiones remotas&lt;/h2&gt; &lt;p align="justify"&gt;Ahora volvemos al &lt;em&gt;SQL Server Configuration Manager&lt;/em&gt; pero esta vez nos vamos en el apartado &lt;em&gt;Network Configuration&lt;/em&gt; a los protocolos de nuestra instancia y verificamos que el protocolo &lt;strong&gt;TCP/IP&lt;/strong&gt; esté activo&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-8Lhxyy0uMHc/TyKJJ74JakI/AAAAAAAAHcw/qfmaYFp3lFs/s1600-h/Sin-t%2525C3%2525ADtulo-5%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-5" border="0" alt="Sin-t&amp;iacute;tulo-5" src="http://lh5.ggpht.com/-rUwcc3RRH4c/TyKJKcOJx5I/AAAAAAAAHc4/V2fQ4tQcwOs/Sin-t%2525C3%2525ADtulo-5_thumb%25255B2%25255D.jpg?imgmax=800" width="565" height="259"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Una vez comprobado vamos a &lt;em&gt;SQL Native Client 10.0 Configuration&lt;/em&gt; y en los protocolos cliente comprobamos que TCP/IP esté activo&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-oSELA9cS8xA/TyKJLCENcTI/AAAAAAAAHdA/yB0Cu49vmsY/s1600-h/Sin-t%2525C3%2525ADtulo-6%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-6" border="0" alt="Sin-t&amp;iacute;tulo-6" src="http://lh6.ggpht.com/-Ap2NFFBThlU/TyKJLtzlorI/AAAAAAAAHdI/7oPaEbxt7t8/Sin-t%2525C3%2525ADtulo-6_thumb%25255B2%25255D.jpg?imgmax=800" width="571" height="240"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;/p&gt;    &lt;p align="justify"&gt;Si estas dos opciones se cumplen ya podríamos acceder remotamente a nuestro servidor. Si aún así no podemos acceder por IP es porque tenemos mal configurados los puertos &lt;strong&gt;TCP&lt;/strong&gt;, en mi caso el protocolo &lt;strong&gt;TCP&lt;/strong&gt; estaba configurado para escuchar por el puerto 1433 pero el SQL estaba configurado para que cada vez que se conectara lo hiciera en un puerto aleatorio.&lt;/p&gt; &lt;p align="justify"&gt;A partir de ahora este manual es solo para &lt;strong&gt;conectarse por IP local o remotamente a nuestro servidor&lt;/strong&gt;.&lt;/p&gt; &lt;h2 align="justify"&gt;Cambiar el puerto por defecto en SQL Server&lt;/h2&gt; &lt;p align="justify"&gt;En el &lt;em&gt;SQL Server Configuration Manager&lt;/em&gt; nos vamos en el apartado &lt;em&gt;Network Configuration&lt;/em&gt; nuevamente a los protocolos de nuestra instancia y hacemos clic derecho en &lt;strong&gt;TCP/IP&lt;/strong&gt;, allí veremos todas las IPs de nuestro servidor y la configuración de los puertos, para conectarnos por el 1433 esta debería ser la configuración:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Q3oJh_MSv0Q/TyKJMbcG2XI/AAAAAAAAHdU/HBdZCseD-h8/s1600-h/Sin-t%2525C3%2525ADtulo-7%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-7" border="0" alt="Sin-t&amp;iacute;tulo-7" src="http://lh4.ggpht.com/-4-sJms4ZzbI/TyKJNPNlVKI/AAAAAAAAHdc/9ec0SppBDNk/Sin-t%2525C3%2525ADtulo-7_thumb%25255B2%25255D.jpg?imgmax=800" width="374" height="424"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Si TCP Dynamic Ports tiene el valor 0 esto significa que esta configurado para puertos dinámicos, debemos borrar el 0 para todas las Ips, desde IP1 hasta IPAll y poner el valor del puerto deseado (en mi caso 1433) en TCP Port.&lt;/p&gt; &lt;p align="justify"&gt;Una vez tenemos esto ya hemos configurado SQL para que cuando se inicie transmita en ese puerto, ahora debemos configurar el protocolo cliente para que escuche en el mismo puerto.&lt;/p&gt; &lt;p align="justify"&gt;En el &lt;em&gt;SQL Server Configuration Manager&lt;/em&gt; nos vamos en el apartado &lt;em&gt;SQL Native Client 10.0 Configuration&lt;/em&gt; a los protocolos cliente TCP/IP. Alli hacemos clic derecho y en las propiedades vemos si está escuchando en el mismo puerto que hemos configurado nosotros:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-lpVHu2h-PPA/TyKJN01mzxI/AAAAAAAAHdg/fmpsivM6jVg/s1600-h/Sin-t%2525C3%2525ADtulo-8%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-8" border="0" alt="Sin-t&amp;iacute;tulo-8" src="http://lh5.ggpht.com/-jm9V-UELc4I/TyKJOUSVHrI/AAAAAAAAHdo/asAupH-kkkQ/Sin-t%2525C3%2525ADtulo-8_thumb%25255B3%25255D.jpg?imgmax=800" width="563" height="487"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="justify"&gt;Al reiniciar el servidor ya deberíamos poder &lt;strong&gt;conectarnos remotamente al SQL Server por IP&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Os dejo un listado con las fuentes consultadas para elaborar este manual:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server-microsoft-sql-server-error/"&gt;Error: 40 – Could not open a connection to SQL Server&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://blogs.msdn.com/b/sql_protocols/archive/2007/03/31/named-pipes-provider-error-40-could-not-open-a-connection-to-sql-server.aspx"&gt;Named Pipes Provider, error: 40 - Could not open a connection to SQL Server&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msdn.microsoft.com/es-es/sqlserver/gg521092?WT.mc_id=eml-n-es-loc-SQL_SP-december_2010"&gt;Guía de instalación de SQL Server 2008 R2 paso a paso&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/cc646023.aspx"&gt;Configurar Firewall de Windows para permitir el acceso a SQL Server&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://www.blogdemegastar.com/2010/09/pasos-para-configurar-sql-server-2008.html"&gt;Pasos para configurar SQL SERVER 2008 para admitir conexiones remotas&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx"&gt;SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified&lt;/a&gt;&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/ms177440.aspx"&gt;Cómo configurar un servidor para que escuche en un puerto TCP específico&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-1610288776884047818?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bPAjuDujbTdtnQKu5Qxe0KrUFm4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bPAjuDujbTdtnQKu5Qxe0KrUFm4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bPAjuDujbTdtnQKu5Qxe0KrUFm4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bPAjuDujbTdtnQKu5Qxe0KrUFm4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/cqSV4LNgukY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=1610288776884047818&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1610288776884047818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1610288776884047818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/cqSV4LNgukY/sql-server-named-pipes-provider-error.html" title="SQL Server Named Pipes Provider error: 40" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-U4JYj4SCvvw/TyKJGifi0CI/AAAAAAAAHcI/AVZ2zsss1OY/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/01/sql-server-named-pipes-provider-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGQX46fip7ImA9WhRUFkg.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-1867280938206178673</id><published>2012-01-27T10:37:00.000+01:00</published><updated>2012-01-27T10:37:00.016+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T10:37:00.016+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="bases de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="listados" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><title>Listado de palabras en castellano</title><content type="html">&lt;p align="justify"&gt;Aquí os dejo un recurso que puede ser muy útil para algunos, &lt;a href="http://dl.dropbox.com/u/462677/db_diccionario.rar"&gt;una base de datos en MySQL con un diccionario&lt;/a&gt;, o mas bien un listado, de más de 55 mil palabras en castellano.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-RFPiu-z6RDY/TyEfL4SoqUI/AAAAAAAAHb0/1-Hp6LoOx30/s1600-h/PALABRAS%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="PALABRAS" border="0" alt="PALABRAS" align="left" src="http://lh3.ggpht.com/-6pE0xtyDCPQ/TyEfMcXMY4I/AAAAAAAAHb4/pXc_KqjHEzw/PALABRAS_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="162"&gt;&lt;/a&gt;El archivo SQL consta de una base de datos con una única tabla, la cual tiene 4 campos, la clave primario y 3 campos de texto con la misma palabra (todas en minúscula). La diferencia entre los 3 campos es que el primero llamado palabra es un varchar con lo cual en las consultas SQL no distingue entre acentos o ñ y n, los otros dos campos son binarios por tanto si distinguen, uno de ellos tiene ñ pero no tiene acentos y el otro tiene acentos y ñ para una comparativa más exacta.&lt;/p&gt; &lt;p align="justify"&gt;El origen de estas palabras los he sacado del diccionario de español genérico de Open Office disponible para múltiples países desde su página para &lt;a href="http://www.openoffice.org/es/programa/diccionario.html"&gt;diccionarios en español para Open Office&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Luego de descargar el archivo hay que renombrar la extensión a ZIP y descomprimir el archivo OXT (con el 7zip, Winrar o similares), nos quedarán varios archivos de texto, el que nos interesa es el de la extensión DIC que contiene una palabra por línea.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-1867280938206178673?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3uS2qdrwuq5RXIh4UNbGFRBKYn0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3uS2qdrwuq5RXIh4UNbGFRBKYn0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3uS2qdrwuq5RXIh4UNbGFRBKYn0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3uS2qdrwuq5RXIh4UNbGFRBKYn0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/dO53o_Am_sM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=1867280938206178673&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1867280938206178673?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1867280938206178673?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/dO53o_Am_sM/listado-de-palabras-en-castellano.html" title="Listado de palabras en castellano" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-6pE0xtyDCPQ/TyEfMcXMY4I/AAAAAAAAHb4/pXc_KqjHEzw/s72-c/PALABRAS_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/01/listado-de-palabras-en-castellano.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMQ3kzcCp7ImA9WhRUFUs.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-6443859906973958280</id><published>2012-01-26T10:23:00.001+01:00</published><updated>2012-01-26T10:23:02.788+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T10:23:02.788+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades" /><category scheme="http://www.blogger.com/atom/ns#" term="boletín electrónico" /><category scheme="http://www.blogger.com/atom/ns#" term="windows 8" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="sistemas operativos" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Microsoft apuesta en todo por Windows 8</title><content type="html">&lt;p align="justify"&gt;A nadie le parece extraño toda la campaña mediática con el nuevo Windows 8 ni los &lt;a href="http://www.xataka.com/portatiles/lenovo-ideapad-yoga-muestra-las-posibilidades-de-windows-8"&gt;convenios&lt;/a&gt; que se están firmando con proveedores de hardware para lanzar el nuevo sistema en tablets y en teléfonos, lo que si me sorprendió fue recibir hoy el nuevo boletín para los partners rediseñado muy al estilo de &lt;a href="http://www.genbeta.com/windows/microsoft-reinventa-windows-la-experiencia-windows-8"&gt;Windows 8&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-w0zD4ifytAM/TyEbbnZknKI/AAAAAAAAHbk/tBtYOVCDayQ/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh5.ggpht.com/-hxGQjRXnl5k/TyEbcYom-QI/AAAAAAAAHbs/pgx8KaHwvaI/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" width="568" height="341"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Para los seguidores de este nuevo sistema operativo de la casa de Redmond os dejo el enlace a la página oficial de &lt;a href="http://windows.microsoft.com/es-ES/windows-8/preview"&gt;Windows 8&lt;/a&gt; desde la cual es posible descargar la &lt;a href="http://msdn.microsoft.com/en-us/windows/apps/br229516"&gt;Developer Preview&lt;/a&gt;. Y también algunas &lt;a href="http://www.xataka.com/portatiles/novedades-y-secretos-en-las-especificaciones-hardware-de-windows-8"&gt;novedades y secretos en las especificaciones hardware&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/5786062601235309767-6443859906973958280?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6gDB9P92hpw9aw_5MNDocFeeLYE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6gDB9P92hpw9aw_5MNDocFeeLYE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6gDB9P92hpw9aw_5MNDocFeeLYE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6gDB9P92hpw9aw_5MNDocFeeLYE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/fv40TTWFH7U" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=6443859906973958280&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6443859906973958280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6443859906973958280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/fv40TTWFH7U/microsoft-apuesta-en-todo-por-windows-8.html" title="Microsoft apuesta en todo por Windows 8" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-hxGQjRXnl5k/TyEbcYom-QI/AAAAAAAAHbs/pgx8KaHwvaI/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/01/microsoft-apuesta-en-todo-por-windows-8.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANR3c5eip7ImA9WhRWFUU.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-603964638836519488</id><published>2012-01-03T11:33:00.001+01:00</published><updated>2012-01-03T11:33:16.922+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T11:33:16.922+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ttfb" /><category scheme="http://www.blogger.com/atom/ns#" term="minify" /><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="yui compressor" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="htaccess" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>Time to First Byte</title><content type="html">&lt;p align="justify"&gt;El &lt;strong&gt;Time To First Byte&lt;/strong&gt; o TTFB es una medida que se utiliza a menudo como un indicador de la capacidad de respuesta de un servidor web o de otros recursos de red. Es la duración entre el momento en que se realiza una petición HTTP y la recepción del primer byte de la página por el navegador. Se compone del tiempo de conexión de socket, el tiempo necesario para enviar la solicitud HTTP y el tiempo para conseguir el primer byte de la página. &lt;p align="justify"&gt;Según la definición anterior podemos llegar a la conclusión de que el &lt;strong&gt;Time To First Byte&lt;/strong&gt; depende de las capacidades de nuestro servidor y ellas son las que influyen directamente en que este tiempo sea mayor o menor. &lt;p align="justify"&gt;Aquí os dejo una web en la que podremos &lt;a href="http://www.bytecheck.com/"&gt;medir el Time to First Byte&lt;/a&gt; de nuestro sitio. &lt;p align="justify"&gt;¿Cómo mejorar el &lt;strong&gt;Time To First Byte&lt;/strong&gt;? La respuesta es simple, mejorando las capacidades de nuestro servidor o eliminado carga del mismo. &lt;p align="justify"&gt;En este segundo aspecto es muy importante ver si estamos utilizando &lt;a href="http://scriptinside.blogspot.com/search?q=minify"&gt;herramientas de compresión de códigos JS o CSS&lt;/a&gt; y de ser así si esta es como la herramienta &lt;em&gt;Minify&lt;/em&gt; que se ejecuta en nuestro servidor y sirve dinámicamente estos contenidos comprimidos y reducidos. Si tenemos esta utilidad instalada tenemos una gran posibilidad de tener un Time To First Byte elevado porque mientras más archivos JS o CSS tenga que procesar más tarda en servirlo con la consiguiente carga de trabajo del servidor web. &lt;p align="justify"&gt;Yo prefiero utilizar &lt;a href="http://developer.yahoo.com/yui/compressor/"&gt;YUI Compressor&lt;/a&gt; con la desventaja que generando el archivo JS y CSS debes tener un entorno de desarrollo con estos archivos separados para poder corregir errores y por cada modificación que se realice se deben generar los archivos nuevos en JS o CSS, pero al contrario que &lt;a href="http://code.google.com/p/minify/"&gt;Minify&lt;/a&gt; esta herramienta comprime mucho más el código y además no lleva carga de procesamiento del lado del servidor porque el archivo es como un archivo JS o CSS normal, pudiendo reducir el &lt;strong&gt;Time To First Byte&lt;/strong&gt; de estas peticiones en un 99 % y el tiempo de respuesta del sitio en hasta un 25 %. &lt;p align="justify"&gt;&lt;em&gt;YUI Compressor&lt;/em&gt; no es una utilidad por así llamarlo sencilla pero aquí os dejo una &lt;a href="http://refresh-sf.com/yui/"&gt;web dónde podéis generar los archivos JS o CSS ofuscados&lt;/a&gt;. &lt;p align="justify"&gt;Con esto tendríamos el código ofuscado pero necesitamos comprimirlo con gzip de manera manual por lo que debemos tener instalado en nuestro servidor apache el módulo deflate e incluir en nuestro archivo htaccess las siguientes líneas de código: &lt;p align="justify"&gt;&amp;lt;Files *.css&amp;gt;&lt;br&gt;SetOutputFilter DEFLATE&lt;br&gt;&amp;lt;/Files&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;&amp;lt;Files *.js&amp;gt;&lt;br&gt;SetOutputFilter DEFLATE&lt;br&gt;&amp;lt;/Files&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;Con esto ya tendríamos un tiempo de carga de nuestra web un 25 % más rápido.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-603964638836519488?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EbsPnJ4_cwuKZBt6TPmeyI6qwqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbsPnJ4_cwuKZBt6TPmeyI6qwqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EbsPnJ4_cwuKZBt6TPmeyI6qwqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbsPnJ4_cwuKZBt6TPmeyI6qwqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/rKInhA6RB5s" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=603964638836519488&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/603964638836519488?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/603964638836519488?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/rKInhA6RB5s/time-to-first-byte.html" title="Time to First Byte" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2012/01/time-to-first-byte.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUHRX09fSp7ImA9WhRXFUs.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-6436801080180728718</id><published>2011-12-22T16:37:00.001+01:00</published><updated>2011-12-22T16:37:14.365+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-22T16:37:14.365+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="buscadores" /><category scheme="http://www.blogger.com/atom/ns#" term="blogs" /><category scheme="http://www.blogger.com/atom/ns#" term="servicios google" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="historial web" /><title>Blogger, el historial y el buscador de Google</title><content type="html">&lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-2mTJQ5k0md8/TvNOpKwVWLI/AAAAAAAAHbQ/cQmjR0SFcj0/s1600-h/google-servicios%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 3px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="google-servicios" border="0" alt="google-servicios" align="right" src="http://lh5.ggpht.com/-r-k9-777XA4/TvNOpj9DO2I/AAAAAAAAHbY/m8zqpqNylFs/google-servicios_thumb%25255B3%25255D.jpg?imgmax=800" width="209" height="221"&gt;&lt;/a&gt;Es impresionante la integración que están llevando a cabo en el buscador de Google con tal de ofrecerte servicios cada vez más personalizados, no cabe duda que cada vez la labor del SEO para el posicionamiento de según qué contenidos es más y más difícil.&lt;/p&gt; &lt;p align="justify"&gt;El otro día me ocurrió algo muy curioso mientras buscaba en Google y es que para un par de enlaces me salían mensajes como los siguientes:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;Tú has compartido esto en &lt;a href="http://www.blogger.com/start?hl=es"&gt;Blogger&lt;/a&gt;. · 8 Feb 2011&lt;/div&gt;&lt;/li&gt; &lt;li&gt; &lt;div align="justify"&gt;Visitaste esta página el 16/12/11.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;El primero de estos textos sale porque dentro de un post en este mismo blog puse un enlace a esa web, o sea no es un más 1 (+1) o un enlace compartido en su red social, es un enlace dentro del contenido del blog ¡alucinante! Estaré atrasado pero es que lo descubrí hace poco, no sé desde cuando Google lo lleva implementado.&lt;/p&gt; &lt;p align="justify"&gt;El segundo mensaje se basa en el &lt;a href="https://www.google.com/history/"&gt;Historial Web de Búsquedas&lt;/a&gt; si lo tienes habilitado con ellos.&lt;/p&gt; &lt;p align="justify"&gt;El resumen es que poco a poco Google va centralizando todos sus servicios para brindar búsquedas cada vez más individualizadas.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-6436801080180728718?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J6_ef4x52EmyZBFpOYZkoHgFirk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J6_ef4x52EmyZBFpOYZkoHgFirk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J6_ef4x52EmyZBFpOYZkoHgFirk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J6_ef4x52EmyZBFpOYZkoHgFirk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/hAL4PkOzlZc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=6436801080180728718&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6436801080180728718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6436801080180728718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/hAL4PkOzlZc/blogger-el-historial-y-el-buscador-de.html" title="Blogger, el historial y el buscador de Google" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-r-k9-777XA4/TvNOpj9DO2I/AAAAAAAAHbY/m8zqpqNylFs/s72-c/google-servicios_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/blogger-el-historial-y-el-buscador-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAERHs5eyp7ImA9WhRXEkQ.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-1714090120568179213</id><published>2011-12-19T12:21:00.001+01:00</published><updated>2011-12-19T12:21:45.523+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T12:21:45.523+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="anuncios" /><title>Intercambio fichas Monopoly McDonald’s</title><content type="html">&lt;p align="justify"&gt;Esto es uno de los proyectos que surgen en un almuerzo, una idea sencilla y de fácil implementación, técnicamente una web para facilitar el &lt;strong&gt;intercambio de fichas del Monopoly en la promoción del 30 Aniversario de McDonald’s España&lt;/strong&gt; pues no es muy complicada pero no voy a negar que no deja de ser entretenida o al menos si tiene éxito instructiva.&lt;/p&gt; &lt;p align="justify"&gt;Sin enrollarme más os dejo la web para el &lt;a href="http://monopoly.ecine.info/"&gt;intercambio de fichas del Monopoly en esta promoción del McDonald’s&lt;/a&gt; en 2011 como viene siendo costumbre en esta compañía los últimos años.&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Sólo recordar que la web anterior no es oficial y no tiene ninguna vinculación con &lt;em&gt;&lt;strong&gt;McDonald's España&lt;/strong&gt;&lt;/em&gt; ni con su promoción &lt;em&gt;30 Aniversario&lt;/em&gt;. Esta web no oficial tiene como único objetivo poner en contacto de manera particular a participantes de la promoción &lt;em&gt;30 Aniversario de McDonald's España&lt;/em&gt; para facilitar que se completen los grupos de fichas con propiedades del &lt;strong&gt;Monopoly&lt;/strong&gt; de dicha promoción.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;El resto del aviso legal y la forma de utilizar esta aplicación lo podéis encontrar en el pie de la misma, así como las condiciones de la promoción en la &lt;a href="http://www.mcdonalds.es/monopoly/"&gt;web oficial de McDonald’s España&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/5786062601235309767-1714090120568179213?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7oBu2vCcXOVajIZXnICEtp7aWeM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7oBu2vCcXOVajIZXnICEtp7aWeM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7oBu2vCcXOVajIZXnICEtp7aWeM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7oBu2vCcXOVajIZXnICEtp7aWeM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/sSbrFpw-u4E" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=1714090120568179213&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1714090120568179213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1714090120568179213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/sSbrFpw-u4E/intercambio-fichas-monopoly-mcdonalds.html" title="Intercambio fichas Monopoly McDonald’s" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/intercambio-fichas-monopoly-mcdonalds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYCQXwzeCp7ImA9WhRXEE8.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-2528668567998126207</id><published>2011-12-16T10:36:00.000+01:00</published><updated>2011-12-16T10:36:00.280+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T10:36:00.280+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tweets" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="tuenti" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="+1" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="boton me gusta" /><category scheme="http://www.blogger.com/atom/ns#" term="redes sociales" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Gestionar clics en botones de redes sociales</title><content type="html">&lt;p align="justify"&gt;En cualquier sitio web que se implementen los nuevos botones &lt;strong&gt;me gusta (like) de Facebook&lt;/strong&gt;, o &lt;strong&gt;+1 de Google&lt;/strong&gt;, o &lt;strong&gt;tweet de Twitter&lt;/strong&gt; podemos ver que en realidad todos se basan en el mismo sistema, un código javascript que construye un iframe y sobre el cuál es que se carga todo el código para gestionar nuestras interacciones en cada una de estas redes sociales.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-I8JepfO78yM/TuXbeDbOMcI/AAAAAAAAHa4/blfwD6bA-mM/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh6.ggpht.com/-XDzYwga6uo0/TuXbe8chdwI/AAAAAAAAHbA/7qgJGZ9BWCY/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" width="321" height="43"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Acceder al contenido de estos iframe desde nuestra web con javascript no está permitido porque da un error del tipo &lt;em&gt;Unsafe JavaScript attempt to access frame with URL&lt;/em&gt; tu dominio &lt;em&gt;from frame with URL&lt;/em&gt; dominio del script. &lt;em&gt;Domains, protocols and ports must match&lt;/em&gt;. Lo que viene a decirnos este error es la prohibición de acceder mediante javascript a un iframe con un dominio distinto al nuestro por temas de seguridad.&lt;/p&gt; &lt;p align="justify"&gt;Teniendo en cuenta esto la única solución que nos queda es depender de las interfaces de programación de aplicaciones (APIs) de cada una de estas redes sociales y ver si implementan &lt;strong&gt;funciones callback para capturar este tipo de eventos&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;La buena noticias es que tanto &lt;strong&gt;Facebook&lt;/strong&gt;, &lt;strong&gt;Google&lt;/strong&gt; y &lt;strong&gt;Twitter&lt;/strong&gt; tienen contempladas en sus respectivas interfaces de programación (APIs) estos casos. En este post voy a centrarme en &lt;strong&gt;capturar y gestionar los clics realizados en los botones de interacción de cada una de estas redes sociales&lt;/strong&gt; utilizando funciones callback implementadas en sus APIs.&lt;/p&gt; &lt;h2 align="justify"&gt;Gestionar los clics en el botón me gusta de Facebook&lt;/h2&gt; &lt;p align="justify"&gt;Para ello en vez del código proporcionado por la &lt;a href="http://developers.facebook.com/docs/reference/javascript/"&gt;página de desarrolladores de Facebook&lt;/a&gt; tenemos que escribir el siguiente código:&lt;/p&gt; &lt;p align="justify"&gt;&amp;lt;script&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.fbAsyncInit = function() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.init({appId: 'FACEBOOK_APP_ID', status: true, cookie: true, xfbml: true});&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.Event.subscribe('edge.create', function(href, widget) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Hacer algo, por ejemplo, realizar el seguimiento del clic en el botón "Me Gusta" aquí&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (function(d, s, id) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var js, fjs = d.getElementsByTagName(s)[0];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.getElementById(id)) {return;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js = d.createElement(s); js.id = id;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js.src = "//connect.facebook.net/es_ES/all.js";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fjs.parentNode.insertBefore(js, fjs);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }(document, 'script', 'facebook-jssdk'));&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;Nota: es muy importante poner el FACEBOOK_APP_ID dónde lo he puesto porque por defecto viene como variable en la url del plugin all.js y esto produce conflictos de autentificación en Facebook, el error que nos daría es el siguiente &lt;em&gt;Uncaught Error: FB.Auth.setAuthResponse only compatible with OAuth2&lt;/em&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Tip: Para capturar los &lt;u&gt;No Me Gusta&lt;/u&gt; lo que debemos hacer es duplicar este código y sustituir edge.create por edge.remove.&lt;/p&gt; &lt;p align="justify"&gt;Esta es la &lt;a href="http://developers.facebook.com/docs/reference/plugins/like"&gt;url de Facebook para el plugin Like&lt;/a&gt;.&lt;/p&gt; &lt;h2 align="justify"&gt;Cómo capturar y hacer el seguimiento de clics en el botón de Google plus (+1)&lt;/h2&gt; &lt;p align="justify"&gt;Google es mucho más sencillo que Facebook de cara a los desarrolladores, lo único que tenemos que hacer es agregar en el tag plusone un atributo adicional llamado callback, por ejemplo el código para un botón de google plus de tamaño medio sería el siguiente:&lt;/p&gt; &lt;p align="justify"&gt;&amp;lt;g:plusone size="medium" callback="plusone_vote"&amp;gt;&amp;lt;/g:plusone&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;La función plusone_vote la declaramos como una función normal dentro de nuestros archivos javascript.&lt;/p&gt; &lt;p align="justify"&gt;Aquí os dejo la &lt;a href="http://www.google.com/webmasters/+1/button/index.html"&gt;página destinada a implementar y personalizar el botón +1 de Google&lt;/a&gt;.&lt;/p&gt; &lt;h2 align="justify"&gt;Capturar y hacer el seguimiento de tweets&lt;/h2&gt; &lt;p align="justify"&gt;Twitter es más parecido a Facebook en esta implementación de hecho tal vez un poco más complicado porque desde la web de desarrolladores de Twitter el código que se nos da carga el archivo javascript de manera lineal y necesitamos que se cargue de manera asíncrona, el código sería el siguiente:&lt;/p&gt; &lt;p align="justify"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; window.twttr = (function (d,s,id) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var t, js, fjs = d.getElementsByTagName(s)[0];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (d.getElementById(id)) return; js=d.createElement(s); js.id=id;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js.src="//platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }(document, "script", "twitter-wjs"));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Esperamos a que se carguen los recursos de manera asíncrona&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; twttr.ready(function (twttr) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ahora personalizamos nuestro eventos&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; twttr.events.bind('tweet', function(event) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Hacer algo, por ejemplo, realizar el seguimiento del tweet aquí&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/p&gt; &lt;p align="justify"&gt;Nota: podemos consultar la lista de todos los eventos disponibles en la siguiente &lt;a href="https://dev.twitter.com/docs/intents/events#waiting-for-asynchronous-resources"&gt;página de desarrolladores de Twitter&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Este es el enlace con toda la &lt;a href="http://twitter.com/goodies/tweetbutton"&gt;información para comenzar a usar este servicio y crear sus propios botones tweet personalizados&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Para Tuenti no es necesario ninguna función callback ya que no crea iframe en su nuevo &lt;a href="http://www.tuenti.com/desarrolladores/"&gt;botón de compartir&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Dentro de cada función callback se puede utilizar jquery.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-2528668567998126207?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ct5zD6hSHJdsOEVE810HtIB_Yvs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ct5zD6hSHJdsOEVE810HtIB_Yvs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ct5zD6hSHJdsOEVE810HtIB_Yvs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ct5zD6hSHJdsOEVE810HtIB_Yvs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/cKa7rRK4fzA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=2528668567998126207&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2528668567998126207?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2528668567998126207?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/cKa7rRK4fzA/gestionar-clics-en-botones-de-redes.html" title="Gestionar clics en botones de redes sociales" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-XDzYwga6uo0/TuXbe8chdwI/AAAAAAAAHbA/7qgJGZ9BWCY/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/gestionar-clics-en-botones-de-redes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGQXwyfCp7ImA9WhRQGEs.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-7513843547739843085</id><published>2011-12-14T14:17:00.000+01:00</published><updated>2011-12-14T14:17:00.294+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T14:17:00.294+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wordpress" /><category scheme="http://www.blogger.com/atom/ns#" term="plugins" /><category scheme="http://www.blogger.com/atom/ns#" term="blogs" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><title>Wordpress desactivar contribución Audio Link Player</title><content type="html">&lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-c8maWfQewXA/Tt9npJxrzfI/AAAAAAAAHao/lUoz3rSr0Ww/s512/wordpress%25255B4%25255D.jpg?imgmax=800"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="wordpress" border="0" alt="wordpress" align="right" src="http://lh4.ggpht.com/-4nI7TVR18ug/Tt9npwVlnvI/AAAAAAAAHaw/9A0k2NdRW4A/s512/wordpress_thumb%25255B2%25255D.jpg?imgmax=800" width="170" height="174"&gt;&lt;/a&gt;Cuando comencé con mi blog en wordpress lo hice instalando con ella el &lt;a href="http://dennishoppe.de/wordpress-plugins/audio-link-player"&gt;plugin Audio Link Player&lt;/a&gt; es cual trae por defecto una agresiva codificación para recordarnos a cada instante que le hagamos una donación a su cuenta de PayPal. Es bastante molesto que en el dashboard de tu Wordpress aparezca un widget recordándonos esta posible contribución y además en el menú de la izquierda aparece bien resaltado un enlace con el texto &lt;strong&gt;your contribution is still missing&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Teniendo en cuenta lo molesto de este plugin pero a la vez que realmente no me compensa desinstalarlo he decidido modificarlo para eliminar esta petición de contribución o donación.&lt;/p&gt; &lt;p align="justify"&gt;Me atrevo a modificarlo y publicar estos cambios en el blog porque &lt;a href="http://ayudawordpress.com/todos-los-themes-y-plugins-para-wordpress-tienen-licencia-gpl/"&gt;todos los temas y plugins de wordpress se publican bajo licencia GPL&lt;/a&gt; y por tanto pueden ser &lt;a href="http://es.wikipedia.org/wiki/GNU_General_Public_License"&gt;modificados libremente&lt;/a&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Para eliminar el mensaje &lt;strong&gt;your contribution is still missing&lt;/strong&gt; del &lt;strong&gt;Audio Link Player&lt;/strong&gt; debemos ir al directorio del plugin (&lt;em&gt;wp-content/plugins/audio-link-player&lt;/em&gt;) y modificar el archivo &lt;strong&gt;contribution.php&lt;/strong&gt;. En este archivo se encuentra la función &lt;strong&gt;Add_Meta_Box&lt;/strong&gt; y en ella es que nos centraremos eliminando su contenido y dejándolo solo en la siguiente línea:&lt;/p&gt; &lt;p align="justify"&gt;Function Add_Meta_Box(){return false;}&lt;/p&gt; &lt;p align="justify"&gt;De esta forma eliminamos el widget y el enlace en el menú tan molestos y tan poco estéticos de nuestro dashboard de wordpress.&lt;/p&gt; &lt;p align="justify"&gt;Para buscar &lt;a href="http://wordpress.org/extend/plugins/audio-link-player"&gt;alternativas a este plugin&lt;/a&gt; tenemos la anterior url.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-7513843547739843085?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q2Xu2uJDfi9k8-LK9dQLHd8NbXs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q2Xu2uJDfi9k8-LK9dQLHd8NbXs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q2Xu2uJDfi9k8-LK9dQLHd8NbXs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q2Xu2uJDfi9k8-LK9dQLHd8NbXs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/0oZvU8WlnDE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=7513843547739843085&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7513843547739843085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7513843547739843085?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/0oZvU8WlnDE/wordpress-desactivar-contribucion-audio.html" title="Wordpress desactivar contribución Audio Link Player" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-4nI7TVR18ug/Tt9npwVlnvI/AAAAAAAAHaw/9A0k2NdRW4A/s72-c/wordpress_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/wordpress-desactivar-contribucion-audio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGQXo_cSp7ImA9WhRQFkQ.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-4026491281023198683</id><published>2011-12-12T12:47:00.000+01:00</published><updated>2011-12-12T12:47:00.449+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T12:47:00.449+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="yast" /><category scheme="http://www.blogger.com/atom/ns#" term="instalaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="rpm" /><category scheme="http://www.blogger.com/atom/ns#" term="opensuse" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title>Instalar paquetes RPM con YAST en openSUSE</title><content type="html">&lt;p align="justify"&gt;Yast es una de las mejores herramientas para la gestión de software en el mundo linux y admite no solo la instalación de paquetes a través de repositorios (lo cual es lo ideal) sino desde paquetes RPM.&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Instalar paquetes RPM con yast en openSuse&lt;/strong&gt; es relativamente sencillo y lo único que tenemos que hacer es agregar el directorio local donde tenemos los paquetes RPM como un repositorio más.&lt;/p&gt; &lt;p align="justify"&gt;Para ello abrimos yast y en &lt;em&gt;Software&lt;/em&gt; seleccionamos &lt;em&gt;Software Repositories&lt;/em&gt; y una vez allí pulsamos la opción &lt;em&gt;Add&lt;/em&gt;:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-_RQXQH6TqtY/Tt9Sml-pbSI/AAAAAAAAHZ4/QISTGyjgd7c/s512/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg?imgmax=800"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh6.ggpht.com/-vlp4mFWfOLE/Tt9SnQ2Jl6I/AAAAAAAAHaA/Uza_ydGKkag/s512/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" width="566" height="349"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Le decimos que queremos un repositorio que sea un directorio local:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-vAf5Y6_4Sec/Tt9SovaESII/AAAAAAAAHaI/zoXXp4qlJ7Q/s512/Sin-t%2525C3%2525ADtulo-2%25255B5%25255D.jpg?imgmax=800"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-2" border="0" alt="Sin-t&amp;iacute;tulo-2" src="http://lh3.ggpht.com/-ngjp7UJ98ww/Tt9Spt9J3GI/AAAAAAAAHaQ/3V1vKn_YAs0/s512/Sin-t%2525C3%2525ADtulo-2_thumb%25255B3%25255D.jpg?imgmax=800" width="567" height="352"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Y al pulsar &lt;em&gt;next&lt;/em&gt; le damos a &lt;em&gt;browse&lt;/em&gt; para localizar el directorio:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-zwBRs3HFnrQ/Tt9SqakD3PI/AAAAAAAAHaY/hfYbqWawI-w/s512/Sin-t%2525C3%2525ADtulo-3%25255B5%25255D.jpg?imgmax=800"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-3" border="0" alt="Sin-t&amp;iacute;tulo-3" src="http://lh5.ggpht.com/-t2FP0MBYfKk/Tt9SrJ85F7I/AAAAAAAAHac/gi8BjhnJEf8/s512/Sin-t%2525C3%2525ADtulo-3_thumb%25255B3%25255D.jpg?imgmax=800" width="568" height="355"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;De esta forma cuando volvamos a buscar software con yast el nos buscará también dentro de este directorio.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-4026491281023198683?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_FFcOL4_kUQyv85BwfBenAWHpSw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_FFcOL4_kUQyv85BwfBenAWHpSw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_FFcOL4_kUQyv85BwfBenAWHpSw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_FFcOL4_kUQyv85BwfBenAWHpSw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/_LwuMenRdoA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=4026491281023198683&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4026491281023198683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4026491281023198683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/_LwuMenRdoA/instalar-paquetes-rpm-con-yast-en.html" title="Instalar paquetes RPM con YAST en openSUSE" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-vlp4mFWfOLE/Tt9SnQ2Jl6I/AAAAAAAAHaA/Uza_ydGKkag/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/instalar-paquetes-rpm-con-yast-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIBQH4-cCp7ImA9WhRQEkg.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-5683184978238583216</id><published>2011-12-07T12:31:00.001+01:00</published><updated>2011-12-07T12:32:31.058+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-07T12:32:31.058+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="consultas sql" /><category scheme="http://www.blogger.com/atom/ns#" term="bases de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="queries" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="triggers" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="disparadores" /><title>Claves únicas para valores nulos en MySQL</title><content type="html">&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-JFGknIayK-Q/Tt9OdxqpLJI/AAAAAAAAHZo/oGWU1pF6B-g/s512/mysql1%25255B4%25255D.jpg?imgmax=800"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 7px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="mysql1" border="0" alt="mysql1" align="left" src="http://lh3.ggpht.com/-ciH51MB7B5U/Tt9Oe_awS2I/AAAAAAAAHZw/x3j7x_4acjM/s512/mysql1_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="140"&gt;&lt;/a&gt;Todo el que esté familiarizado con las bases de datos MySQL sabe que un campo que admita valores nulos no puede ser una clave única porque al insertar 2 veces el valor null esto daría error, sin embargo no es descabellado pensar que necesitemos un campo que admita valores nulos pero que en caso de no ser nulo sea único.&lt;/p&gt; &lt;p align="justify"&gt;Existen varias formas de hacer esto, una del lado del código y otra con las herramientas propias de la base de datos. La más compleja pero más eficiente es la segunda de estas opciones y es sobre la que trata este artículo.&lt;/p&gt; &lt;p align="justify"&gt;En esto post voy a hablar de la creación de 2 &lt;a href="http://dev.mysql.com/doc/refman/5.0/es/using-triggers.html"&gt;triggers (disparadores) para MySQL&lt;/a&gt; que validan que al insertar u actualizar una fila un determinado campo sea nulo o único. La sintaxis de los triggers en MySQL puede ser muy sencilla e intuitiva una vez la conoces pero como todos los lenguajes tiene su particularidad, lo importante es saber que no se pueden tener 2 trigger para un mismo evento en una tabla por tanto si queremos validar 2 campos de este tipo en una misma tabla deberemos hacerlo en el mismo disparador.&lt;/p&gt; &lt;p align="justify"&gt;No me voy a sentar en la explicación de cómo y cuando se debe crear un &lt;strong&gt;trigger&lt;/strong&gt; porque para eso ya existen manuales muchos más completos en internet, solo voy a reducirme a plasmar el código y explicar algunas características que hacen que cumpla su funcionalidad.&lt;/p&gt; &lt;h2 align="justify"&gt;Trigger para evitar que se inserten valores duplicados en un campo&lt;/h2&gt; &lt;p align="justify"&gt;Sintaxis SQL:&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DROP TRIGGER IF EXISTS insert_duplicate;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DELIMITER §&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;CREATE TRIGGER insert_duplicate BEFORE INSERT ON table&lt;br&gt;FOR EACH ROW&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp; SET @contador = 0;&lt;br&gt;&amp;nbsp; IF NEW.numero IS NOT NULL THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT count(*) INTO @contador FROM table WHERE numero like NEW.numero;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @contador &amp;gt; 0 THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set @msg = concat('Trigger Error: Trying to insert a duplicate value in numero: ', cast(NEW.numero as char));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; signal sqlstate '45000' set message_text = @msg;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END IF;&lt;br&gt;&amp;nbsp; END IF;&lt;br&gt;END§&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DELIMITER ;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Mi &lt;strong&gt;disparador&lt;/strong&gt; se llama insert_duplicate y se ejecutará antes de insertar cualquier registro en la tabla table. Lo primero que hago es eliminarlo si existe y luego lo creo nuevamente. El funcionamiento del disparador es sencillo:&lt;/font&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font size="2"&gt;declaro una variable contador que será la encargada de decirme cuantos hay en ese momento.&lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font size="2"&gt;si en nuevo valor no es nulo entonces efectúo la validación, en caso contrario no hago nada.&lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font size="2"&gt;ejecuto una consulta SQL para saber cuantos registros de la tabla ya tienen este valor y lo guardo en la variable contador (es muy importante utilizar esta sintaxis para guardar el valor del resultado dentro de la variable porque en caso contrario nos puede dar un error del tipo &lt;strong&gt;Not allowed to return a result set from a trigger&lt;/strong&gt;)&lt;/font&gt;&lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;&lt;font size="2"&gt;si el valor es mayor que 0 es que ya existe este valor por tanto lanzo una excepción que pare el proceso de insertar dicha fila (lanzar la excepción con &lt;a href="http://www.sqlpl-guide.com/SIGNAL"&gt;signal&lt;/a&gt; solo es compatible con MySQL 5.5+).&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Nota: al crear el mensaje de error es muy importante convertir el valor de la variable con &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast"&gt;cast&lt;/a&gt; a char.&lt;/font&gt;&lt;/p&gt; &lt;h2 align="justify"&gt;Trigger para evitar que se actualice una fila con un valor duplicado&lt;/h2&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;Sintaxis SQL:&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DROP TRIGGER IF EXISTS update_duplicate;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DELIMITER §&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;CREATE TRIGGER update_duplicate BEFORE UPDATE ON table&lt;br&gt;FOR EACH ROW&lt;br&gt;BEGIN&lt;br&gt;&amp;nbsp; SET @contador = 0;&lt;br&gt;&amp;nbsp; IF (NEW.numero &amp;lt;&amp;gt; OLD.numero OR OLD.numero IS NULL) AND NEW.numero IS NOT NULL THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT count(*) INTO @contador FROM table WHERE numero like NEW.numero;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @contador &amp;gt; 0 THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set @msg = concat('Trigger Error: Trying to update a duplicate value in numero: ', cast(NEW.numero as char));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; signal sqlstate '45000' set message_text = @msg;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; END IF;&lt;br&gt;&amp;nbsp; END IF;&lt;br&gt;END§&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="1"&gt;DELIMITER ;&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;La única diferencia con el trigger anterior es que en este caso la comprobación la lanzará solo cuando el valor antiguo sea nulo o distinto del nuevo y el nuevo no sea nulo, por lo demás todo es igual.&lt;/font&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;font size="2"&gt;¿Alguna solución alternativa?&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-5683184978238583216?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xl5JImzlDml8yluUKOJv8l2wZbU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xl5JImzlDml8yluUKOJv8l2wZbU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xl5JImzlDml8yluUKOJv8l2wZbU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xl5JImzlDml8yluUKOJv8l2wZbU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/PPFSiN2wDPM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=5683184978238583216&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/5683184978238583216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/5683184978238583216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/PPFSiN2wDPM/claves-unicas-para-valores-nulos-en.html" title="Claves únicas para valores nulos en MySQL" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-ciH51MB7B5U/Tt9Oe_awS2I/AAAAAAAAHZw/x3j7x_4acjM/s72-c/mysql1_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/12/claves-unicas-para-valores-nulos-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEAQX48cCp7ImA9WhRSFE4.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-2748787288150052599</id><published>2011-11-16T10:44:00.000+01:00</published><updated>2011-11-16T10:44:00.078+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T10:44:00.078+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="managment studio" /><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="bases de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="windows server" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>SQL Server base de datos tempdb</title><content type="html">&lt;p align="justify"&gt;La &lt;a href="http://msdn.microsoft.com/es-es/library/ms190768.aspx"&gt;base de datos del sistema tempdb&lt;/a&gt; es un recurso global disponible para todos los usuarios conectados a la instancia de SQL Server y se utiliza para incluir objetos de usuario temporales, objetos internos creados por el motor de base de datos de SQL Server y versiones de fila que se generan mediante transacciones.&lt;/p&gt; &lt;p align="justify"&gt;Por esta razón tener optimizada correctamente la configuración de esta base de datos es primordial para garantizar el rendimiento del sistema. &lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Por ejemplo, si el tamaño de &lt;strong&gt;tempdb&lt;/strong&gt; es demasiado pequeño, el procesamiento del sistema podría estar demasiado ocupado con el crecimiento automático de la base de datos y, por tanto, no podría satisfacer las necesidades de carga de trabajo cada vez que se inicia SQL Server. Para obtener más información, vea &lt;a href="http://msdn.microsoft.com/es-es/library/ms175527.aspx"&gt;Optimizar el rendimiento de tempdb&lt;/a&gt; y &lt;a href="http://msdn.microsoft.com/es-es/library/ms345368.aspx"&gt;Planeamiento de capacidad para tempdb&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Otro factor de optimización a tener en cuenta es el número de archivos de datos de &lt;strong&gt;tempdb&lt;/strong&gt; que debe ser igual al número de núcleos de CPU utilizada por SQL Server, hasta un máximo de 8. Esto evita los cuellos de botella en el proceso de asignación de página SGAM (Shared Global Allocation Map) cuando los nuevos objetos temporales son creados. Los archivos de &lt;strong&gt;tempdb&lt;/strong&gt; deben estar en una unidad separada de los datos y los archivos de registro. &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-hYYRrRJIPss/TrPQHXM_A9I/AAAAAAAAHPw/pj7eDBR3_Zo/s1600-h/tempdb%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="tempdb" border="0" alt="tempdb" src="http://lh6.ggpht.com/-pguhertjswY/TrPQHypf9eI/AAAAAAAAHP4/SHAzMBboGEs/tempdb_thumb%25255B3%25255D.jpg?imgmax=800" width="558" height="193"&gt;&lt;/a&gt; &lt;p align="justify"&gt;Esta recomendación viene dada ya que cada objeto temporal que se crea en &lt;strong&gt;tempdb&lt;/strong&gt; necesita páginas asignadas para ello. Estas páginas deben ser asignados a través de páginas SGAM y sólo hay una página &lt;a href="http://msdn.microsoft.com/en-us/library/ms190969.aspx"&gt;SGAM&lt;/a&gt; por archivo de datos (no realmente, pero lo suficientemente cerca). Así que si tienes un solo archivo de datos y se está creando una gran cantidad de objetos temporales, como es posible con &lt;b&gt;SQL Server Reporting Services (&lt;a href="http://msdn.microsoft.com/en-us/library/ms159106.aspx"&gt;SSRS&lt;/a&gt;)&lt;/b&gt; y &lt;a href="http://scriptinside.blogspot.com/2011/10/read-committed-snapshot-isolation-rcsi.html"&gt;RCSI&lt;/a&gt; (u otras bases de datos en el servidor, ya que todos utilizan la misma &lt;strong&gt;tempdb&lt;/strong&gt;) puede crearse un cuello de botella pues está tratando de manejar las asignaciones de muchas peticiones al mismo tiempo. Es por eso que existe la recomendación de crear un archivo de datos &lt;strong&gt;tempdb&lt;/strong&gt; por núcleo de la CPU o hilos activos para aliviar la posibilidad de un cuello de botella en la asignación. Esto es raro pero puede suceder. &lt;p align="justify"&gt;NOTA: Cada archivo de &lt;strong&gt;tempdb&lt;/strong&gt; no necesita estar en su propia unidad de disco, sólo tienen que estar separados de todos los datos de SQL y archivos de registro.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-2748787288150052599?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ec4GhWTcc9gzQWFefWnsIlT7ua8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ec4GhWTcc9gzQWFefWnsIlT7ua8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ec4GhWTcc9gzQWFefWnsIlT7ua8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ec4GhWTcc9gzQWFefWnsIlT7ua8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/AhpnNCa38uk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=2748787288150052599&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2748787288150052599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/2748787288150052599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/AhpnNCa38uk/sql-server-base-de-datos-tempdb.html" title="SQL Server base de datos tempdb" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-pguhertjswY/TrPQHypf9eI/AAAAAAAAHP4/SHAzMBboGEs/s72-c/tempdb_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/sql-server-base-de-datos-tempdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAEQH48fCp7ImA9WhRSEks.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-6300557110382972674</id><published>2011-11-14T10:25:00.000+01:00</published><updated>2011-11-14T10:25:01.074+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T10:25:01.074+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="windows server" /><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="discos duros" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>SQL Server alineación de discos</title><content type="html">&lt;p align="justify"&gt;La &lt;strong&gt;alineación del disco&lt;/strong&gt; (Disk Alignment) puede tener un impacto significativo en el rendimiento del servidor. Una partición mal alineada sufre de un desfase entre los sectores lógicos y los físicos, aumentando así las operaciones de entrada / salida en un disco reduciendo su rendimiento. En una sola partición independiente, el problema no es tan grave, ya que tanto el sistema operativo como los programas funcionan sin inconveniente alguno. Pero bajo determinadas configuraciones, (por ejemplo, discos en modo RAID), la pérdida de rendimiento puede llegar a ser notable. &lt;/p&gt; &lt;p align="justify"&gt;Puesto que la configuración adecuada puede variar mucho según el fabricante, debes consultar con los manuales de cada uno para verificar la correcta alineación del disco y la configuración adecuada. &lt;/p&gt; &lt;p align="justify"&gt;Para el caso específico de un servidor de datos como SQL Server, la asignación o el ancho de banda debe ser mayor o igual a 8k, para evitar páginas mal alineadas o cortadas, se recomienda que esta cifra sea de 64k para que coincida con el tamaño de la extensión de SQL Server (8 páginas de&amp;nbsp; 8K cada una).&lt;/p&gt; &lt;h2 align="justify"&gt;Comprobar la alineación del disco&lt;/h2&gt; &lt;p align="justify"&gt;Para comprobar la &lt;strong&gt;alineación del disco&lt;/strong&gt;: &lt;p align="justify"&gt;1. Click "Start | Inicio" - "Run | Ejecutar" y escribimos MSINFO32 &lt;p align="justify"&gt;2. Click "Components | Componentes" - "Storage | Almacenamiento" - "Disks | Discos" &lt;p align="justify"&gt;3. Miramos el valor de "Partition Starting Offset | Desplazamiento Inicial de Partición" para la unidad que queremos comprobar: &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-6EFaePeElHw/TrPL0qpNKvI/AAAAAAAAHPg/bz05ZcK-ZkQ/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh3.ggpht.com/-3JAqz75vPSs/TrPL1YPCexI/AAAAAAAAHPo/_Ok9yM9_J8A/Sin-t%2525C3%2525ADtulo-1_thumb%25255B3%25255D.jpg?imgmax=800" width="558" height="525"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Este valor del &lt;strong&gt;desplazamiento inicial de la partición&lt;/strong&gt; lo debemos dividir por (64 * 1024). Si el resultado de dividir el valor de Partition Starting Offset es un número entero entonces los discos están alineados en esa unidad, si por el contrario es un número decimal entonces los discos no están alineados. &lt;p align="justify"&gt;NOTA: En todas las unidades formateadas con Windows Server 2008 o posteriores se alinearán automáticamente los discos. &lt;p align="justify"&gt;Aquí os dejo algunas &lt;a href="http://www.neoteo.com/comprueba-la-alineacion-de-tu-disco"&gt;herramientas para comprobar y corregir la alineación de nuestros discos&lt;/a&gt;. Y para los entornos virtualizados con VMWare un excelente manual sobre el &lt;a href="https://hispavirt.wordpress.com/tag/alineacion-vm/"&gt;manejo del espacio de almacenamiento con vSphere&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/5786062601235309767-6300557110382972674?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fwQOV9W5EnF6KQ3DgOrVaJHtBkk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fwQOV9W5EnF6KQ3DgOrVaJHtBkk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fwQOV9W5EnF6KQ3DgOrVaJHtBkk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fwQOV9W5EnF6KQ3DgOrVaJHtBkk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/xX1U5qngrng" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=6300557110382972674&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6300557110382972674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6300557110382972674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/xX1U5qngrng/sql-server-alineacion-de-discos.html" title="SQL Server alineación de discos" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-3JAqz75vPSs/TrPL1YPCexI/AAAAAAAAHPo/_Ok9yM9_J8A/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/sql-server-alineacion-de-discos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkACQXo7fSp7ImA9WhRSEE0.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-7986547885807518660</id><published>2011-11-11T10:46:00.000+01:00</published><updated>2011-11-11T10:46:00.405+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T10:46:00.405+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="comandos" /><category scheme="http://www.blogger.com/atom/ns#" term="consultas sql" /><category scheme="http://www.blogger.com/atom/ns#" term="managment studio" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>SQL Server: acceso exclusivo a la base de datos</title><content type="html">&lt;p align="justify"&gt;Muchas de las operaciones que se realizan sobre las bases de datos de SQL Server requieren el &lt;strong&gt;uso exclusivo de esta base de datos&lt;/strong&gt; por parte del usuario que está ejecutando el proceso o la tarea, una de ella puede ser la restauración de la misma desde un backup. Por ser un requerimiento común es muy normal recibir este mensaje de error:&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;Exclusive access could not be obtained because the database is in use&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;Corregirlo no suele ser muy sencillo, más bien todo lo contrario y depende de los accesos que tenga esa base de datos, aquí os dejaré algunos pasos para identificar e intentar garantizar ese &lt;strong&gt;acceso exclusivo&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;Lo primero que debemos hacer es &lt;em&gt;terminar todas las conexiones existentes a la base de datos&lt;/em&gt; y ello lo haremos con la siguiente instrucción:&lt;/p&gt; &lt;p align="justify"&gt;USE database&lt;br&gt;GO &lt;br&gt;&lt;br&gt;ALTER DATABASE database SET SINGLE_USER WITH ROLLBACK IMMEDIATE; &lt;br&gt;GO &lt;br&gt;&lt;br&gt;ALTER DATABASE database SET MULTI_USER &lt;br&gt;GO&lt;/p&gt; &lt;p align="justify"&gt;También podemos ejecutar esta opción utilizando el procedimiento almacenado sp_dboption:&lt;/p&gt; &lt;p&gt;Use master&lt;br&gt;go&lt;br&gt;sp_dboption database, single, true&lt;br&gt;sp_dboption database, single, false&lt;/p&gt; &lt;p align="justify"&gt;Como vemos esta instrucción pone a la base de datos en modo usuario único terminando todas las transacciones de manera automática y luego la restaura a su estado original sin ninguna transacción abierta en ella.&lt;/p&gt; &lt;p align="justify"&gt;El problema vienen cuando tenemos tareas o programas que iteran con la base de datos constantemente los cuales aunque se terminan con la consulta anterior una vez la base de datos vuelve a su estado de multi usuario vuelven a acceder. Para identificar y cerrar o detener estas tareas o programas lo que debemos de utilizar es el Monitor de Actividad de SQL Server.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-XMBRdXDt6ek/Tq6m1a9m09I/AAAAAAAAHOw/2TAjTswcOzk/s1600-h/Sin-t%2525C3%2525ADtulo-2%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-2" border="0" alt="Sin-t&amp;iacute;tulo-2" src="http://lh3.ggpht.com/-HOhivOIVhTQ/Tq6m107NzoI/AAAAAAAAHO4/V_MUfXrksSM/Sin-t%2525C3%2525ADtulo-2_thumb%25255B2%25255D.jpg?imgmax=800" width="563" height="108"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-rcWye3UyhbE/Tq6m2rZsLrI/AAAAAAAAHPA/27q3GjndzYQ/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh4.ggpht.com/-k4J5cbmeiHw/Tq6m3CqdkuI/AAAAAAAAHPI/I1TEYvWqv8A/Sin-t%2525C3%2525ADtulo-1_thumb%25255B3%25255D.jpg?imgmax=800" width="567" height="255"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Una vez identificados debemos cerrar estas aplicaciones y de esa manera evitaremos este molesto error (&lt;strong&gt;exclusive access could not be obtained because the database is in use&lt;/strong&gt;) para poder realizar nuestras tareas con normalidad.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-7986547885807518660?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-5TO_RgCfz-mlcJQaEWUqELvwaY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-5TO_RgCfz-mlcJQaEWUqELvwaY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-5TO_RgCfz-mlcJQaEWUqELvwaY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-5TO_RgCfz-mlcJQaEWUqELvwaY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/vgeYlzeUYZQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=7986547885807518660&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7986547885807518660?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7986547885807518660?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/vgeYlzeUYZQ/sql-server-acceso-exclusivo-la-base-de.html" title="SQL Server: acceso exclusivo a la base de datos" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-HOhivOIVhTQ/Tq6m107NzoI/AAAAAAAAHO4/V_MUfXrksSM/s72-c/Sin-t%2525C3%2525ADtulo-2_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/sql-server-acceso-exclusivo-la-base-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCQXY5fyp7ImA9WhRTGE4.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-1152788746820047653</id><published>2011-11-09T10:16:00.000+01:00</published><updated>2011-11-09T10:16:00.827+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T10:16:00.827+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="comandos" /><category scheme="http://www.blogger.com/atom/ns#" term="managment studio" /><category scheme="http://www.blogger.com/atom/ns#" term="listados" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="detalles" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>SQL Server: listados de bases de datos y tablas</title><content type="html">&lt;p align="justify"&gt;Para saber &lt;strong&gt;cuales son todas las bases de datos de un servidor SQL Server&lt;/strong&gt; tenemos estas dos opciones:&lt;/p&gt; &lt;p align="justify"&gt;EXEC sp_helpdb&lt;br&gt;SELECT * FROM master.dbo.sysdatabases;&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-QKcynuf0LJg/Tq6RvufrzNI/AAAAAAAAHOg/t25OzOyt1nE/s1600-h/listado%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="listado" border="0" alt="listado" align="right" src="http://lh4.ggpht.com/-A0zo33p95ZE/Tq6RwPQR0AI/AAAAAAAAHOk/JcJtu7eO_Mw/listado_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="239"&gt;&lt;/a&gt;Ambas nos devuelven el mismo listado lo único que cambia son los datos que nos muestran, la consulta SQL es mucho más amplia en datos que el procedimiento almacenado.&lt;/p&gt; &lt;p align="justify"&gt;Importante: ambas deben de ser ejecutadas bajo master: USE master GO.&lt;/p&gt; &lt;p align="justify"&gt;Para saber &lt;strong&gt;cuales son todas las tablas de una base de datos en SQL Server&lt;/strong&gt; lo primero que debes hacer es tener abierta la ventana de consulta bajo tu base de datos (USE DB_name) y luego ejecutar una de estas dos opciones:&lt;/p&gt; &lt;p align="justify"&gt;EXEC sp_tables&lt;br&gt;SELECT * FROM information_schema.tables;&lt;/p&gt; &lt;p align="justify"&gt;Y por último para &lt;strong&gt;saber todas las columnas de una tabla en SQL Server&lt;/strong&gt; puedes ejecutar el procedimiento almacenado sp_columns.&lt;/p&gt; &lt;p align="justify"&gt;Las opciones son ilimitadas y ahora también existe la posibilidad de generar un solo archivo SQL que puede extraer todo lo que necesitas incluso extraer aparte de todas las estructuras, todo los procedimientos almacenados, triggers, etc.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-1152788746820047653?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/23F8jH1RJtCnGuamMPjcFY78LGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/23F8jH1RJtCnGuamMPjcFY78LGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/23F8jH1RJtCnGuamMPjcFY78LGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/23F8jH1RJtCnGuamMPjcFY78LGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/3KB5pfqVXeU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=1152788746820047653&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1152788746820047653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/1152788746820047653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/3KB5pfqVXeU/sql-server-listados-de-bases-de-datos-y.html" title="SQL Server: listados de bases de datos y tablas" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-A0zo33p95ZE/Tq6RwPQR0AI/AAAAAAAAHOk/JcJtu7eO_Mw/s72-c/listado_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/sql-server-listados-de-bases-de-datos-y.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IMQX0-cSp7ImA9WhRTFkg.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-660271096487815227</id><published>2011-11-07T10:53:00.000+01:00</published><updated>2011-11-07T10:53:00.359+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T10:53:00.359+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="managment studio" /><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="queries" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>SQL Server: reorganizar y volver a generar índices</title><content type="html">&lt;p align="justify"&gt;Según la propia &lt;a href="http://technet.microsoft.com/es-es/library/ms189858.aspx"&gt;Microsoft&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;El Motor de base de datos de SQL Server mantiene índices automáticamente cada vez que inserta, actualiza o elimina operaciones realizadas en los datos subyacentes. Con el tiempo, estas modificaciones pueden hacer que la información del índice se disperse por la base de datos (se fragmente). La fragmentación ocurre cuando los índices tienen páginas en las que la ordenación lógica, basada en el valor de clave, no coincide con la ordenación física dentro del archivo de datos. Los índices muy fragmentados pueden reducir el rendimiento de la consulta y ralentizar la respuesta de la aplicación. &lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;Se puede solucionar la &lt;strong&gt;fragmentación del índice reorganizándolo o volviéndolo a generar&lt;/strong&gt; pero el primer paso es identificar los índices fragmentados, para ello podemos ejecutar la siguiente consulta SQL que nos sacará un listado de los índices, las tablas a las que pertenecen y el nivel de fragmentación de los mismos:&lt;/p&gt; &lt;p align="justify"&gt;SELECT a.object_id as table_id, &lt;br&gt;OBJECT_NAME(a.object_id) as table_name, &lt;br&gt;a.index_id, &lt;br&gt;name as index_name, &lt;br&gt;avg_fragmentation_in_percent &lt;br&gt;FROM sys.dm_db_index_physical_stats (DB_ID(), DEFAULT, NULL, NULL, NULL) AS a&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id&lt;/p&gt; &lt;p align="justify"&gt;Para índices cuya fragmentación está entre el 5 % y el 30 % solo es necesario reorganizarlo mientras que para índices cuya fragmentación supera el 30 % lo mejor es reconstruirlos.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-3RI0SVzVhJk/Tq6Mu_uKoII/AAAAAAAAHOQ/K8FoEYZfmlc/s1600-h/repaire%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="repaire" border="0" alt="repaire" align="left" src="http://lh5.ggpht.com/-GLus5Qvf1Y8/Tq6MvU_hRZI/AAAAAAAAHOU/uvBtakZzcmo/repaire_thumb%25255B1%25255D.jpg?imgmax=800" width="236" height="240"&gt;&lt;/a&gt;La instrucción ALTER INDEX IX_name REORGANIZE nos permite reorganizar índices fragmentados entre un 5 y un 30 porciento mientras que ALTER INDEX IX_name REBUILD WITH ONLINE = ON nos reconstruye los índices más fragmentados manteniéndolos online, si no se especifica online = on la regeneración del índice se ejecutará sin conexión. &lt;/p&gt; &lt;p align="justify"&gt;La &lt;strong&gt;reorganización de un índice&lt;/strong&gt; siempre se ejecuta en línea por lo que su disponibilidad es del 100 % mientras que si se quiere lograr una disponibilidad similar a la opción de reorganización al regenerar se deben generar los índices con el comando anterior.&lt;/p&gt; &lt;p align="justify"&gt;Existen planes de manteniendo en SQL Server que permiten automatizar estas tareas pero es recomendable correrlos la primera vez de manera manual porque pueden dar errores como el siguiente:&lt;/p&gt; &lt;p align="justify"&gt;&lt;strong&gt;The index cannot be reorganized because page level locking is disabled&lt;/strong&gt;&lt;/p&gt; &lt;p align="justify"&gt;Para corregir este error lo único que debemos hacer es modificar el índice en cuestión con la siguiente consulta:&lt;/p&gt; &lt;p align="justify"&gt;ALTER INDEX IX_name ON table_name&lt;br&gt;SET (&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ALLOW_PAGE_LOCKS = ON&lt;br&gt;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-660271096487815227?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Hr74bVaL71rYxygbmVnwxGy7TmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hr74bVaL71rYxygbmVnwxGy7TmA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Hr74bVaL71rYxygbmVnwxGy7TmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hr74bVaL71rYxygbmVnwxGy7TmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/9K9RelucqOg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=660271096487815227&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/660271096487815227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/660271096487815227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/9K9RelucqOg/sql-server-reorganizar-y-volver-generar.html" title="SQL Server: reorganizar y volver a generar índices" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-GLus5Qvf1Y8/Tq6MvU_hRZI/AAAAAAAAHOU/uvBtakZzcmo/s72-c/repaire_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/sql-server-reorganizar-y-volver-generar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUEQX4yeSp7ImA9WhRTFE0.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-4632310937409882519</id><published>2011-11-04T10:50:00.000+01:00</published><updated>2011-11-04T10:50:00.091+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-04T10:50:00.091+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="errores" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>Algunos cambios en PHP a partir de la 5.3</title><content type="html">&lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-daxFoEO1nh0/Tq59su2DlTI/AAAAAAAAHOA/Q_ZjlHFGV18/s1600-h/php-5-3-en-hostgator%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="php-5-3-en-hostgator" border="0" alt="php-5-3-en-hostgator" align="right" src="http://lh5.ggpht.com/-WKwJdQ9Pz0o/Tq59tKPi-9I/AAAAAAAAHOI/ROUsl3jOL7w/php-5-3-en-hostgator_thumb%25255B1%25255D.jpg?imgmax=800" width="221" height="157"&gt;&lt;/a&gt;Los que migramos PHP de la versión 5.2.x a cualquiera superior a la 5.3 nos encontramos en el log con algunos errores y alertas que en realidad son muy sencillos de corregir, en este post veremos dos: safe mode y default time zone.&lt;/p&gt; &lt;h2 align="justify"&gt;PHP Deprecated:&amp;nbsp; Directive 'safe_mode' is deprecated in PHP 5.3 and greater&lt;/h2&gt; &lt;p align="justify"&gt;El &lt;strong&gt;modo seguro de PHP&lt;/strong&gt; era un intento de resolver el problema de seguridad en un servidor compartido pero a partir de la versión 5.3 de PHP se dieron cuenta los desarrolladores que es arquitectónicamente incorrecto tratar de resolver este problema a nivel de PHP y como consecuencia han quedado deprecadas estas funciones.&lt;/p&gt; &lt;p align="justify"&gt;Para corregir este error debemos ir al archivo php.ini y editar la directiva Safe Mode de esta forma:&lt;/p&gt; &lt;p align="justify"&gt;; Safe Mode&lt;br&gt;;&lt;br&gt;safe_mode = Off&lt;/p&gt; &lt;h2 align="justify"&gt;PHP Warning:&amp;nbsp; date(): It is not safe to rely on the system's timezone settings. &lt;/h2&gt; &lt;p align="justify"&gt;El error completo es el siguiente:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;A partir de PHP 5.1.0 (cuando las funciones de fecha/hora fueron reescritas), cada llamada a la función de fecha/hora generaba un E_NOTICE si la zona horaria no es válida o no estaba definida. Ahora a partir de la versión 5.3.0 se lanza un E_WARNING en vez de un E_STRICT.&lt;/p&gt; &lt;p align="justify"&gt;Parra corregirlo es necesario editar el php.ini y configurar la &lt;a href="http://www.php.net/manual/es/timezones.europe.php"&gt;zona horaria&lt;/a&gt;:&lt;/p&gt; &lt;p align="justify"&gt;[Date]&lt;br&gt;; Defines the default timezone used by the date functions&lt;br&gt;date.timezone = "America/Los_Angeles"&lt;/p&gt; &lt;p align="justify"&gt;Para que estos cambios tengan efecto es necesario luego de editar el php.ini reiniciar nuestro servidor Apache.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-4632310937409882519?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8qS1FEMwW1UjzTMLC0M8032gqac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8qS1FEMwW1UjzTMLC0M8032gqac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8qS1FEMwW1UjzTMLC0M8032gqac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8qS1FEMwW1UjzTMLC0M8032gqac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/fK4CnY_QiTc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=4632310937409882519&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4632310937409882519?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/4632310937409882519?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/fK4CnY_QiTc/algunos-cambios-en-php-partir-de-la-53.html" title="Algunos cambios en PHP a partir de la 5.3" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-WKwJdQ9Pz0o/Tq59tKPi-9I/AAAAAAAAHOI/ROUsl3jOL7w/s72-c/php-5-3-en-hostgator_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/algunos-cambios-en-php-partir-de-la-53.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCQXY5fip7ImA9WhRTEk4.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-6198301803886893367</id><published>2011-11-02T11:37:00.001+01:00</published><updated>2011-11-02T11:37:40.826+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T11:37:40.826+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="optimización" /><category scheme="http://www.blogger.com/atom/ns#" term="navegadores" /><title>Desventajas de minimizar código JavaScript con Minify</title><content type="html">&lt;p align="justify"&gt;&lt;a href="http://code.google.com/p/minify/"&gt;Minify&lt;/a&gt; es una utilidad escrita en PHP5 que permite eliminar los caracteres innecesarios del código fuente sin cambiar su funcionalidad permitiendo incluir en una sola línea de código múltiples archivos JavaScript o CSS reduciendo con ello el tiempo de carga de nuestra página web. &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-UPioTyh7Tr8/TrEdcT1obfI/AAAAAAAAHPQ/yhRo6cSGatc/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh5.ggpht.com/--kWjLhfkaF0/TrEdc81wb3I/AAAAAAAAHPU/z34FYGYarkg/Sin-t%2525C3%2525ADtulo-1_thumb%25255B3%25255D.jpg?imgmax=800" width="565" height="78"&gt;&lt;/a&gt; &lt;p align="justify"&gt;Pero todo lo que brilla no es oro y aunque llevo tiempo utilizando Minify hay algunas pegas a tener en cuenta: &lt;p align="justify"&gt;1.- hay que tenerlo instalado en el entorno real y en el de desarrollo porque sino a la hora de combinar los archivos hay que estar descartando estas líneas de código &lt;p align="justify"&gt;2.- los debuggers de los principales navegadores son incapaces de encontrar correctamente el archivo y en algunos casos la línea de error cuando se produce un fallo en JavaScript lo cual hace más complicada la tarea de corrección de errores &lt;p align="justify"&gt;3.- puede dar problemas con las codificaciones de los archivos comprimidos &lt;p align="justify"&gt;4.- debes tener configurado apache correctamente con una librería adicional (redirect) que no viene instalada por defecto &lt;p align="justify"&gt;5.- en algunas ocasiones cuando el contenido minimizado es cacheado por el navegador y el cambio realizado en los archivos no es significativo la única opción para que el navegador interprete los cambios es cambiando el orden de los archivos en la línea de declaración &lt;p align="justify"&gt;En resumen, para aplicaciones grandes muchas veces da más trabajo que el que resuelve, tener herramientas de este tipo nos hace más perezosos a la hora de optimizar nuestro código, lo primero siempre es intentar optimizar el código JavaScript sin necesidad de utilizar este tipo de herramientas y si utilizas alguna librería externa descargarnos siempre la versión minimizada.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-6198301803886893367?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9rT2DLvMxZstVmAwfY4Dqt3cEtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9rT2DLvMxZstVmAwfY4Dqt3cEtU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9rT2DLvMxZstVmAwfY4Dqt3cEtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9rT2DLvMxZstVmAwfY4Dqt3cEtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/sEcYIPe24Uw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=6198301803886893367&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6198301803886893367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/6198301803886893367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/sEcYIPe24Uw/desventajas-de-minimizar-codigo.html" title="Desventajas de minimizar código JavaScript con Minify" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/--kWjLhfkaF0/TrEdc81wb3I/AAAAAAAAHPU/z34FYGYarkg/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/desventajas-de-minimizar-codigo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AMQXo5eCp7ImA9WhRTEk8.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-7291032290254087538</id><published>2011-11-02T10:23:00.000+01:00</published><updated>2011-11-02T10:23:00.420+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T10:23:00.420+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Preparar y ejecutar consultas con SQL Server driver para PHP</title><content type="html">&lt;p align="justify"&gt;Los que acostumbramos a utilizar MySQL no estamos familiarizados con esta sintaxis de &lt;strong&gt;preparar y ejecutar consultas&lt;/strong&gt; que tiene el driver de Microsoft para PHP.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-MsOinmDhJeg/Tq53RBwUy1I/AAAAAAAAHNw/h-2JIsSIB8s/s1600-h/php-logo%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 8px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="php-logo" border="0" alt="php-logo" align="left" src="http://lh3.ggpht.com/-2hAzImqdjiE/Tq53RjBaMuI/AAAAAAAAHN4/Vl21Ni9Z8QA/php-logo_thumb%25255B1%25255D.jpg?imgmax=800" width="240" height="127"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;En este post intento mostrar cómo usar el driver de SQL Server para PHP para &lt;strong&gt;ejecutar una instrucción preparada&lt;/strong&gt; varias veces. Esto es mediante la combinación de &lt;a href="http://www.php.net/manual/en/function.sqlsrv-prepare.php"&gt;sqlsrv_prepare&lt;/a&gt; y &lt;a href="http://msdn.microsoft.com/es-es/library/cc296162(v=sql.90).aspx"&gt;sqlsrv_execute&lt;/a&gt;, y el resultado es una instrucción que se compila una vez en el servidor y se puede ejecutar después varias veces con distintos valores de parámetro. En el caso de consultas únicas, se recomienda el uso de sqlsrv_query que es a lo que estamos acostumbrados en MySQL. &lt;/p&gt; &lt;blockquote&gt; &lt;p align="justify"&gt;Al preparar una instrucción que usa variables como parámetros, las variables se enlazan a la instrucción. Eso significa que si se actualizan los valores de las variables, la próxima vez que se ejecute la instrucción se ejecutará con los valores de parámetros actualizados.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="justify"&gt;En el siguiente enlace tenemos un ejemplo de cómo utilizar estas funciones para &lt;a href="http://msdn.microsoft.com/es-es/library/cc296162(v=sql.90).aspx"&gt;ejecutar una consulta varias veces pero solo prepararla una vez&lt;/a&gt; (la función sqlsrv_query realiza estas dos acciones cada vez que es llamada)&lt;/p&gt; &lt;p align="justify"&gt;Otra curiosidad fundamental de SQL Server es &lt;strong&gt;llamar desde PHP a un procedimiento almacenado de SQL Server&lt;/strong&gt;, para ello podemos utilizar la siguiente sintaxis:&lt;/p&gt; &lt;p align="justify"&gt;$params = array($i, $s, $a);&lt;br&gt;$sql = "{call UpdateOrInsertSession(?,?,?)}";&lt;br&gt;$stmt = sqlsrv_query($this-&amp;gt;_conn, $sql, $params);&lt;/p&gt; &lt;p align="justify"&gt;Para ver un ejemplo podemos consultar el siguiente enlace del &lt;a href="http://blogs.msdn.com/b/sqlphp/archive/2011/10/20/using-sql-azure-to-store-php-session-data.aspx"&gt;blog del controlador de SQL Server para PHP&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/5786062601235309767-7291032290254087538?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WyHyzsTuT5tAEJBi7WMoEX-N1cA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WyHyzsTuT5tAEJBi7WMoEX-N1cA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WyHyzsTuT5tAEJBi7WMoEX-N1cA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WyHyzsTuT5tAEJBi7WMoEX-N1cA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/LI4LwTMzVRo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=7291032290254087538&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7291032290254087538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7291032290254087538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/LI4LwTMzVRo/preparar-y-ejecutar-consultas-con-sql.html" title="Preparar y ejecutar consultas con SQL Server driver para PHP" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-2hAzImqdjiE/Tq53RjBaMuI/AAAAAAAAHN4/Vl21Ni9Z8QA/s72-c/php-logo_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/11/preparar-y-ejecutar-consultas-con-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YBQng6eCp7ImA9WhRTEEg.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-9052954843314962370</id><published>2011-10-31T10:59:00.001+01:00</published><updated>2011-10-31T10:59:13.610+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T10:59:13.610+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="comandos" /><category scheme="http://www.blogger.com/atom/ns#" term="instalaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="curiosidades" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="manuales" /><category scheme="http://www.blogger.com/atom/ns#" term="herramientas" /><category scheme="http://www.blogger.com/atom/ns#" term="programas" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>Navegación sincronizada en Total Commander</title><content type="html">&lt;p align="justify"&gt;Para los que no utilicen el &lt;a href="http://es.wikipedia.org/wiki/Total_Commander"&gt;Total Commander&lt;/a&gt; solo comentaré que es una excelente utilidad para la gestión y comparación de archivos, muy útil para entornos de programación dónde hay que comprobar la sincronización entre directorios con código fuente.&lt;/p&gt; &lt;p align="justify"&gt;El &lt;a href="http://ghisler.ch/board/viewforum.php?f=11"&gt;Total Commander&lt;/a&gt; es muy extensible pero sus opciones por defecto la verdad que son muy cortas y a veces es necesario ampliarlas con comandos que trae el propio programa o con menús externos creados por usuarios.&lt;/p&gt; &lt;p align="justify"&gt;Una de las herramientas que más echo en falta que no esté por defecto es la &lt;strong&gt;navegación sincronizada por directorios&lt;/strong&gt; como hacen la mayoría de clientes FTP como FileZilla, opción que estos si traen sin necesidad de configurar un comando adicional.&lt;/p&gt; &lt;p align="justify"&gt;Para crear un menú con la opción de &lt;strong&gt;navegación sincronizada&lt;/strong&gt; tenemos que posicionarnos en la barra de herramientas y hacer clic derecho para que salga la opción de cambiar:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-VgmtMbcbTto/Tq5xL24MlyI/AAAAAAAAHNQ/Spow2-_vsWA/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-1" border="0" alt="Sin-t&amp;iacute;tulo-1" src="http://lh4.ggpht.com/-03By2iyi6_M/Tq5xMoZjHXI/AAAAAAAAHNY/WAP2SoB1Kag/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" width="562" height="80"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Una vez allí debemos escribir en la nueva ventana en el apartado comando el siguiente comando interno: cm_SyncChangeDir, los demás parámetros de configuración son opcionales, para el &lt;a href="http://www.iconfinder.com/"&gt;ícono&lt;/a&gt; puedes elegir uno propio o puedes utilizar la librería del &lt;a href="http://www.ghisler.com/"&gt;Total Commander&lt;/a&gt; para seleccionar uno, esta librería de íconos se encuentra en el archivo WCMICONS.DLL dentro del directorio de instalación de &lt;strong&gt;Total Commander&lt;/strong&gt;.&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-y8nFweidPJM/Tq5xM4ETu0I/AAAAAAAAHNg/dC1zTT9-Fcs/s1600-h/Sin-t%2525C3%2525ADtulo-2%25255B5%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Sin-t&amp;iacute;tulo-2" border="0" alt="Sin-t&amp;iacute;tulo-2" src="http://lh3.ggpht.com/-IM6TUqu9Txs/Tq5xcIUwg7I/AAAAAAAAHNo/rbVxD42SA9Q/Sin-t%2525C3%2525ADtulo-2_thumb%25255B3%25255D.jpg?imgmax=800" width="559" height="327"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Como os comentaba también existen los &lt;a href="http://www.totalcmd.net/plugring/menu_XL_spanish_75x.html"&gt;Menús extendidos en español para Total Commander 7.55 (final)&lt;/a&gt; creados por Sombra, que tienen prácticamente todo lo que se puede hacer con Total Commander. Estos menús son compatible con la nueva versión 8, por lo menos hasta la beta 6.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-9052954843314962370?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BXWiYKD50Xc-FLmTiT2v6nJlHVs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BXWiYKD50Xc-FLmTiT2v6nJlHVs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BXWiYKD50Xc-FLmTiT2v6nJlHVs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BXWiYKD50Xc-FLmTiT2v6nJlHVs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/TmJBpjS4c6Y" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=9052954843314962370&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/9052954843314962370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/9052954843314962370?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/TmJBpjS4c6Y/navegacion-sincronizada-en-total.html" title="Navegación sincronizada en Total Commander" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-03By2iyi6_M/Tq5xMoZjHXI/AAAAAAAAHNY/WAP2SoB1Kag/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/10/navegacion-sincronizada-en-total.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcARXg-fyp7ImA9WhdaFEo.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-5912124525104147263</id><published>2011-10-24T18:17:00.001+02:00</published><updated>2011-10-24T18:17:24.657+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-24T18:17:24.657+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fotografía" /><category scheme="http://www.blogger.com/atom/ns#" term="móviles" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>Pantalla de bloqueo iOS5</title><content type="html">&lt;p align="justify"&gt;Una de las cosas que más me ha llamado la atención del nuevo iOS 5 son las mejoras a la hora de tomar las fotografías, la cámara ahora dispara fotos más cómodamente desde el botón de subir volumen y además ahora tenemos un atajo para &lt;strong&gt;activar la cámara desde la pantalla de bloqueo&lt;/strong&gt; a la que accedemos pulsando 2 veces en el botón de inicio:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-ySMwbd2h6y4/TqWPhQ0sAtI/AAAAAAAAHMU/vL1vZLaGkXA/s1600-h/specs_controls_20100607%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="specs_controls_20100607" border="0" alt="specs_controls_20100607" src="http://lh5.ggpht.com/-yIdXJS3nnhE/TqWPh88Uu6I/AAAAAAAAHMc/7emoLh1zoho/specs_controls_20100607_thumb%25255B2%25255D.jpg?imgmax=800" width="363" height="324"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Al acceder a la &lt;strong&gt;pantalla de bloqueo del nuevo iOS 5&lt;/strong&gt; veremos el cambio respecto a su predecesor:&lt;/p&gt; &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-lGfMnF4GFjU/TqWPi_l2WPI/AAAAAAAAHMk/mB5EJBqlZLw/s1600-h/iPhone_5_4_actualidad_noticias_369%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 75px 0px 35px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="iPhone_5_4_actualidad_noticias_369" border="0" alt="iPhone_5_4_actualidad_noticias_369" src="http://lh3.ggpht.com/-sAXSw0qEYAQ/TqWPjsv3iJI/AAAAAAAAHMs/TLNU3_zLJVk/iPhone_5_4_actualidad_noticias_369_thumb%25255B2%25255D.jpg?imgmax=800" width="206" height="315"&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/-Q2n4GLy4F9I/TqWPkSAZuGI/AAAAAAAAHM0/uv--jwPhKiw/s1600-h/la%252520foto%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="la foto" border="0" alt="la foto" src="http://lh5.ggpht.com/-5Fdw4Gcd424/TqWPk8QYgjI/AAAAAAAAHM4/TbZRN1izG74/la%252520foto_thumb%25255B4%25255D.png?imgmax=800" width="200" height="316"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p align="justify"&gt;Otra de las cosas significativas es que si tienes &lt;strong&gt;bloqueo por código&lt;/strong&gt; las fotos que realices y que lógicamente se pueden ver con el iPhone bloqueado son las únicas que podrás ver, o sea que tienes acceso a la galería pero solo a las fotos que hagas en ese momento.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-5912124525104147263?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1MvzGZF8OOmck9AzLe1r7fEabCM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1MvzGZF8OOmck9AzLe1r7fEabCM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1MvzGZF8OOmck9AzLe1r7fEabCM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1MvzGZF8OOmck9AzLe1r7fEabCM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/T_l8UQ5Ji_4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=5912124525104147263&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/5912124525104147263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/5912124525104147263?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/T_l8UQ5Ji_4/pantalla-de-bloqueo-ios5.html" title="Pantalla de bloqueo iOS5" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-yIdXJS3nnhE/TqWPh88Uu6I/AAAAAAAAHMc/7emoLh1zoho/s72-c/specs_controls_20100607_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/10/pantalla-de-bloqueo-ios5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QGQXg6eyp7ImA9WhdaEUU.&quot;"><id>tag:blogger.com,1999:blog-5786062601235309767.post-7574497029446088211</id><published>2011-10-21T10:22:00.000+02:00</published><updated>2011-10-21T10:22:00.613+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T10:22:00.613+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bugs" /><category scheme="http://www.blogger.com/atom/ns#" term="tutoriales" /><category scheme="http://www.blogger.com/atom/ns#" term="windows server" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="configuraciones" /><title>Desaparece la opción de compartir archivos en WS2003</title><content type="html">&lt;div align="justify"&gt;
Esta es una pequeña guía que te puede ayudar a solucionar el fallo en tu Windows Server 2003 si detectas que te han desaparecido las carpetas que tenías compartidas. Hay mucha información sobre compartir archivos en internet pero a mí particularmente no me valió de mucho y esta guía de pasos es la que me ayudó.&lt;/div&gt;
&lt;div align="justify"&gt;
Lo primero es comprobar que está configurado tu adaptador de Red para compartir archivos e impresoras, vamos a inicio, panel de control, adaptadores de red y comprobamos cada adaptador:&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;a href="http://lh3.ggpht.com/-TPZ6SqpDO5w/TpwP_3nLkDI/AAAAAAAAHLU/Ugw7FcFb0WQ/s1600-h/Sin-t%2525C3%2525ADtulo-1%25255B4%25255D.jpg"&gt;&lt;img alt="Sin-título-1" border="0" height="519" src="http://lh4.ggpht.com/-HoTI-_oX-jU/TpwQAR-mVeI/AAAAAAAAHLc/Kn3FgpgtBLI/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Sin-título-1" width="546" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Para cada adaptador abrimos las propiedades y debe de estar &lt;em&gt;marcada la opción de compartir archivos e impresoras&lt;/em&gt;:&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;a href="http://lh6.ggpht.com/-7dunRYr6ZcY/TpwQA1wqr-I/AAAAAAAAHLk/OZP-yeoYL-w/s1600-h/Sin-t%2525C3%2525ADtulo-2%25255B4%25255D.jpg"&gt;&lt;img alt="Sin-título-2" border="0" height="357" src="http://lh5.ggpht.com/-ts0G26U-sLg/TpwQBXMHV9I/AAAAAAAAHLs/W4bNaUu2kBQ/Sin-t%2525C3%2525ADtulo-2_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Sin-título-2" width="567" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
Si está todo correcto comprobemos si está el &lt;em&gt;servicio Server activado&lt;/em&gt;, inicio, ejecutar, services.msc y debería aparecernos como la siguiente imagen, si no está activado debemos arrancarlo y ponerlo en modo automático:&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;a href="http://lh3.ggpht.com/-5SDx3gNhhRQ/TpwQCO86kwI/AAAAAAAAHL0/jiT3zkmQFgg/s1600-h/Sin-t%2525C3%2525ADtulo-3%25255B4%25255D.jpg"&gt;&lt;img alt="Sin-título-3" border="0" height="248" src="http://lh3.ggpht.com/-tzuZ7Z0-aAM/TpwQCh7IdCI/AAAAAAAAHL8/0nZMgp0WsEE/Sin-t%2525C3%2525ADtulo-3_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Sin-título-3" width="562" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
Por último comprobamos qué &lt;strong&gt;carpetas tenemos realmente compartidas&lt;/strong&gt;: Inicio - Ejecutar -&amp;nbsp; compmgmt.msc - (enter) - Computer Managment Local - System Tools -&amp;nbsp; Shared Folders – Shares&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;a href="http://lh3.ggpht.com/-su5NaYEhOzI/TpwQC3NvbZI/AAAAAAAAHME/ufybuF6JKMU/s1600-h/Sin-t%2525C3%2525ADtulo-4%25255B4%25255D.jpg"&gt;&lt;img alt="Sin-título-4" border="0" height="267" src="http://lh6.ggpht.com/--QlaY785AlY/TpwQDd_c5SI/AAAAAAAAHMM/R6EkKfeeSOw/Sin-t%2525C3%2525ADtulo-4_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Sin-título-4" width="563" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
Esta guía se aplica a:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt; &lt;div align="justify"&gt;
cuando &lt;strong&gt;desaparece la opción de compartir archivos en windows server 2003&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt; &lt;div align="justify"&gt;
cuando tienes &lt;strong&gt;problemas al compartir archivos en windows server 2003&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt; &lt;div align="justify"&gt;
cuando no se te &lt;strong&gt;muestra la opción de compartir en las opciones de carpeta&lt;/strong&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5786062601235309767-7574497029446088211?l=scriptinside.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WmhtumCrxpF88bHJOZpunBxEmUk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WmhtumCrxpF88bHJOZpunBxEmUk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WmhtumCrxpF88bHJOZpunBxEmUk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WmhtumCrxpF88bHJOZpunBxEmUk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ScriptInside/~4/sndVp-hO3Ak" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5786062601235309767&amp;postID=7574497029446088211&amp;isPopup=true" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7574497029446088211?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5786062601235309767/posts/default/7574497029446088211?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ScriptInside/~3/sndVp-hO3Ak/desaparece-la-opcion-de-compartir.html" title="Desaparece la opción de compartir archivos en WS2003" /><author><name>Reynier de la Rosa</name><uri>https://profiles.google.com/111808091361294123144</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-dWSCgmwJrYs/AAAAAAAAAAI/AAAAAAAAHF0/xwpZHnZ8KxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-HoTI-_oX-jU/TpwQAR-mVeI/AAAAAAAAHLc/Kn3FgpgtBLI/s72-c/Sin-t%2525C3%2525ADtulo-1_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://scriptinside.blogspot.com/2011/10/desaparece-la-opcion-de-compartir.html</feedburner:origLink></entry></feed>

