Listado de Programacion
Trucos manuales o guías del desarrollo
- App.Config/Web.Config Set/Get Value from AppSettings Section
App.Config/Web.Config Set/Get Value from AppSettings Section
Como obtener y modificar los valores de la sección AppSettings de un fichero de configuración app.config/web.config. Para que no se olvide
...using System.Web.Configuration; using System.Configuration; System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration( new System.Configuration.ExeConfigurationFileMap() { ExeConfigFilename = webconfigFile }, System.Configuration.ConfigurationUserLevel.None); string oldValue = config.AppSettings.Settings["SomeKey"].Value; config.AppSettings.Settings["SomeKey"].Value = "NewValue"; config.Save(ConfigurationSaveMode.Modified); - JQuery Post XML to MVC Controller Accepting POST parameters
JQuery Post XML to MVC Controller Accepting POST parameters
Comunicación Ajax GET / POST. Cuando iniciamos una comunicación AJAX y enviamos información al servidor, se puede hacer por GET (los parámetros concatenados en la URI de la Request) o por POST, quedando ocultos. No sólo eso, sino que los parámetros están internos en la Request. Una de las arquitecturas utilizadas en el desarrollo de un sitio web ASP.NET, para que quede el código un "poquito" estructurado, es JQuery + MVC. JQuery se encarga de la parte del Cliente y MVC (Modelo Vista Controlador) se encarga de separar la capa presentación de la capa de negocio. Una vez introducidos, si queremos enviar un XML por JQuery a través de AJAX y que nuestro "Controller" lo recupere sin problemas, podemos hacer lo siguiente. Parte JQuery que realiza la llamada AJAX hacia el servidor... - WCF, Logs de las Peticiones antes y despues de procesar, AfterReceiveRequest y BeforeSendReply
WCF, Logs de las Peticiones antes y despues de procesar, AfterReceiveRequest y BeforeSendReply
Utilizando IServiceBehavior y IDispatchMessageInspector podemos suscribirnos a los eventos después de recibir la "request" y antes de enviar la "response". Tener los logs de una comunicación son muy importantes. Lo diferente con en el caso de WCF (Windows Communication Foundation) es que prácticamente sólo configuramos, ya que casi todo el trabajo sucio lo hace .NET. Por este motivo es tan interesante este artículo, porque además de que WCF nos hace el mundo de la comunicación mucho más sencilla, también podemos registrar los mensajes recibidos y enviados. Existen otras técnicas para registrar toda la comunicación (System.Diagnostics), el problema que encontré es que podía llegar a dejar demasiada información, lo que me resultaba inservible. De todas las soluciones que estuve probando esta era la que mejor se adaptaba a lo que necesitaba. La clave está en crear un "CustomAttribute" para nuestro servidor, y que este registre la información que necesitamos.... - Suscribirse a los eventos del Visor de Sucesos para generar logs
Suscribirse a los eventos del Visor de Sucesos para generar logs
Suscribirse a los eventos del Event Viewer para imprimir logs relacionados con nuestra aplicación. Esto es útil si queremos que en un mismo fichero de logs aparezcan los logs de la aplicación y los logs que se generan en el propio visor de sucesos del Windows, directa (mediante "System.Diagnostics") o indirectamente (por error de la aplicación). Aunque parezca que no sea para tanto si que es interesante, como me ha sido útil en caso particular, me lo guardo para tenerlo bien apuntadito. Con el siguiente código tendremos suficiente para ir tirando y saber como suscribirnos a los eventos del event viewer.
...String LogMonitor = "Application"; if (EventLog.Exists(LogMonitor)) { if (eventLog == null) { eventLog = new EventLog(LogMonitor); eventLog.EntryWritten += new EntryWrittenEventHandler(EventLog_EntryWritten); eventLog.EnableRaisingEvents = true; } } - Acceso a Ficheros mediante credenciales de forma remota
Acceso a Ficheros mediante credenciales de forma remota
Interaccionar con los ficheros de otro pc utilizando las credeciales de usuario y password. Código de ejemplo para conectarse a un servidor mediante login para poder copiar, borrar o renombrar ficheros de forma remota. Para poder acceder a los ficheros de otro pc que esta protegido con usuario y contraseña, necesitamos utilizar la librería "advapi32.dll", la cual se conecta al servidor utilizando el método "LogoUser". Una vez estamos conectados nos devuelve por referencia un manejador del usuario indicado A pointer to a handle variable that receives a handle to a token that represents the specified user. MSDN. Una vez tenemos el manejador del usuario, ya podemos inicializar una nueva instancia de la clase WindowsIdentity con este usuario. Así cuando accedamos a los ficheros no nos dará error de acceso denegado ni nada parecido, porque estaremos utilizando la cuenta de windows especificada anteriormente. A continuación, un posible ejemplo del código que nos puede interesar.... - Explicación UTF-8 Encoding y porque el XmlDocument da problemas
Explicación UTF-8 Encoding y porque el XmlDocument da problemas
La codificación UTF-8 es una de las más utilizadas para representar cualquier carácter Unicode. La codificación usa símbolos de longitud variable (de 1 a 4 bytes por carácter unicode). Es decir, que 1 carcater unicode puede ocupar hasta 4 bytes, cuando en ascii 1 caracter es 1 byte. Una forma de identificar que el texto esta codificado en UTF-8 es con el BOM Byte Order Mark, que son una serie de 3 bytes concretos. Útil por ejemplo en el envio de texto por stream.
...un carácter 0xFEFF, codificado en UTF-8 como 0xEF,0xBB,0xBF o 239 187 191 - Actualizar JDKHome de NetBeans (Or java Platform)
Actualizar JDKHome de NetBeans (Or java Platform)
Para actualizar la versión del JDK que utiliza NetBeans para ejecutarse, tenemos que modificar el fichero netbeans.conf. Por defecto se encuentra en "C:\Programs Files\[NetBeans Folder]\etc" y modificar la clave netbeans_jdkhome.
...netbeans_jdkhome="C:\Program Files\Java\jdk1.7.0_03" - Compatibilidad en aplicaciones .Net con diferentes versiones del Framework .Net
Compatibilidad en aplicaciones .Net con diferentes versiones del Framework .Net
Cuando desarrollas utilizando un Framework .Net y la máquina destino tiene otra versión. Es decir, por ejemplo desarrollas utilizando VS2008 y Framework 3.5 y el Ordenador destino tiene instalado el Framework 4.0. Esto no quiere decir que tenga por obligación el Framework 3.5 instalado, y al arrancar la aplicación dará un error. Compatibilidad Versiones .Net Framework MSDNDe manera predeterminada, una aplicación se ejecuta en la versión de .NET Framework para la que se creó. Si esa versión no está presente y en el archivo de configuración de la aplicación no se han definido las versiones compatibles, puede producirse un error de inicialización de .NET Framework. En este caso, el intento de ejecutar la aplicación no tendrá éxito.
... - Diferencias entre Clases y Estructuras (Structs) C#
Diferencias entre Clases y Estructuras (Structs) C#
La principal Diferencia entre Classes y Structs es que una es por referencia y la otra por valor. Leyendo el artículo de Koalite comencé a sentir curiosidad sobre el tema, es por ese mismo motivo por el que me dirigí directamente al artículo de la MSDN que mencionaba.Una clase es un tipo de referencia. Cuando se crea un objeto de la clase, la variable a la que se asigna el objeto solo incluye una referencia a dicha memoria. Cuando la referencia a objeto se asigna a una nueva variable, la nueva variable hace referencia al objeto original. Los cambios realizados en una variable se reflejan en la otra variable porque ambas hacen referencia a los mismos datos.
... - PHP:Obtener la Pagina Actual Function PageURL
PHP:Obtener la Pagina Actual Function PageURL
Método en PHP para Obtener la página actual. Teniendo en cuenta si conexión segura o si utiliza un puerto específico. En alguna ocasión puede ser interesante saber en que páginas estamos, por esta razón y por ser un método lo bastánte genérico como poderlo utilizar desde cualquier sitio, nos los guardamos y nos lo apuntamos para futuras referencias.... - Tip: Convert java project to web project in eclipse
Tip: Convert java project to web project in eclipse
Como convertir un proyecto java en un proyecto web en eclipse. Sin tener en cuenta el motivo, cuando Eclipse reconoce una aplicación como "Java project", y queremos asociarla a nuestro servidor web (p.ej. Tomcat) puede darnos el siguiente error:the selection did not contain any resource that can run on a server
Es normal, un proyecto java no es considerado un proyecto web, por lo tanto no puede ejecutarlo en un servidor web. Por ese mismo motivo tenemos que convertir el proyecto, para que esta asociación la tenga en cuenta. Otro tema es la forma de como trabajemos, como si queremos desplegar el war manualmente.... - CSS: Trucos y Efectos con imágenes
CSS: Trucos y Efectos con imágenes
Efectos con imágenes con CSS (reflejo, bordes difuminados, pulsado, ...) y multitud de trucos realmente interesantes (rotar imagenes, desplazar enlaces, ...) No es la primera entrada que escribo recopilando artículos relacionados con el CSS, por eso cuando vemos algo realmente interesante nos gusta tenerlo apuntado.... - Control De Versiones: Nombres de ramas (branch) para el desarrollo paralelo
Control De Versiones: Nombres de ramas (branch) para el desarrollo paralelo
Opinión sobre la nomenclatura de las diferentes ramas para el desarrollo de diferentes versiones. Tengamos en cuenta diferentes aspectos. Por mi propia experiencia, puedo decir que una versión puede comenzar con una alcance, una serie de especificaciones, las cuales no son ni mucho menos fijas. Es decir, una requerimiento puede saltar de una versión a otra en función de las necesidades.El Cliente
... - Javascript Library: Tamaño de Fuente flexible a diferentes dispositivos
Javascript Library: Tamaño de Fuente flexible a diferentes dispositivos
FitText, Librería que adapta el tamaño de la fuente de diferentes diseños web para adaptarse a los diferentes dispositivos que nos encontramos, como Ordenadores de Sobremesa, Tablets o Smartphones. Aunque la primera idea que se nos viene a la cabeza es utilizar CSS, con una librería Javascript nos da más poder a la hora de adaptar nuestros diseños a los diferentes dispositivos.... - RePost: Clases PHP para Xml y MySQL
RePost: Clases PHP para Xml y MySQL
Ejemplos de Clases para PHP. Escribir y leer archivos XML o una clase para Conectarse a MySQL Menos mal que BlogDesarrollo nos cuida. Tenéis muchos más ejemplos, de momento nosotros nos guardamos estos dos.... - Las 3 preguntas diarias del Scrum
Las 3 preguntas diarias del Scrum
Cada persona debe contestar a 3 preguntas en cada reunión Scrum diaria (máximo 15 minutos), para seguir el estado del proyecto hasta la próxima entrega o semientrega.¿Que tareas has realizado desde la última reunión? ¿Que tareas tienes pensado hacer? ¿Que dificultades hay que solucionar para que puedas realizar las tareas?
... - El reto de programar poker bots
El reto de programar poker bots
El problema de crear poker bots o juegos con Inteligencia Artificial. La tarea de desarrollar un software implica siempre una lógica de negocio, donde se implementan las condiciones. Pero si el software debe ser "inteligente", tanto como para poder jugar contra una persona, entonces hablamos de Inteligencia Artificial. Esto aún puede ser más complicado cuando tenemos parámetros incompletos o manejamos posibilidades, es decir, puede no escoger la opción esperada o mejor. Por ejemplo, desarrollar un software que sepa jugar al póker Texas Hold'emIntroducción
... - De que consta el Manifiesto Agil
De que consta el Manifiesto Agil
Como introducción comentar que el manifiesto ágil fueron las conclusiones a las que llegaron un grupo de personas en 2001, que criticaban el desarrollo de software basado en procesos y predicciones. De esa reunión se obtuvo lo considerado como el Manifiesto Ágil. ¿Que criticaban exactamente?, que el desarrollo de software basado en Fases Secuenciales (primero Análisis, luego diseño, después desarrollo, y último pruebas), con fechas calculadas y con ¿Requerimientos Funcionales bien cerrados?, no acaban generando software de calidad en la gran mayoría de los casos. Porque cualquier cambio de requerimiento afecta a todo lo precalculado, disparando costes y alterando fechas. Sobretodo porque el Cliente no ve el resultado hasta que tiene que hacer sus pruebas. Lo que implica cambios en los requerimientos iniciales. Esto suele solucionarse, iniciando el ciclo de nuevo, alterando la fecha inicial o implementar directamente el cambio (si se puede) dejando la documentación desfasada ya desde la versión 1.0El Manifiesto Ágil
... - Java: Obtener valor aleatorio dentro de un Intervalo
Java: Obtener valor aleatorio dentro de un Intervalo
Como obtener un número aleatorio que se encuentra entre dos números. Es decir, un número aleatorio dentro de un rango de valores. Por definición la clase Random de Java, posé el método nextInt() y nextInt(int n). Ambas funciones tienen como valor inicial el 0. Con el siguiente método, podemos obtener el número aleatorio que queramos. Es un método sencillo, reducido en una sóla línea. Para quien le pueda interesar, a mi por lo menos me sirve.
Obtenido de snipplr...public static int randomNumber(int min, int max) { return min + (new Random()).nextInt(max-min); } - TODO List o Task List Comments en Visual Studio 2010 Express Edition
TODO List o Task List Comments en Visual Studio 2010 Express Edition
Obtener una lista de Tareas "TODO" en Visual Studio 2010. Dada las necesidades, nos venía bien ir dejando una lista de Tareas pendientes en el código para ir solucionandolo después. El problema es que por defecto en Visual Studio 2010 no aparece la view Task List. Investigando un poco he encontrado un comentario en forum.asp.netTo make the Task List menu item shown, you need to enable Expert Settings by selecting Tools -> Settings -> Expert Settings.
Esto significa que podemos activar los settings del Visual Studio a nivel Experto, de esta forma aparece la vista de Tareas Pendientes. A continuación sólo tenemos que seguir las indicaciones de la msdn para ir creando TODO en los comentarios y como visualizarlos.... - .NET: Declarar Métodos y Clases como Obsoletas o Deprecates
.NET: Declarar Métodos y Clases como Obsoletas o Deprecates
Cuando queremos definir métodos y clases obsoletas o "deprecadas" en .Net. Es común que se generen nuevos métodos, mejores y más optimizados que los anteriores. Por eso es conveniente indicar de alguna forma que los métodos o clases antiguas son obsoletas, para que nadie las vuelva a utilizar. Esto se consigue con el atributo System.Obsolete (msdn)3 Maneras de Definir Obsoletos y Deprecados
Aunque recomiendo usar cualquiera de las dos últimas.... - Como publicar "Publish Web" con Visual Studio Express Edition
Como publicar "Publish Web" con Visual Studio Express Edition
Vamos a Explicar como publicar con aspnet_compiler.exe dado que en las versiones Express Edition no existe la opción "Publish Web". Aunque existen trucos para crear la opción de publicar un sitio web con algunas versiones del visual studio (VS2008 Express Edition), en la versión Web Developer VS2010 Express Edition no lo hemos logrado. Por ese motivo vamos a explicar como crear un método para publicar sitios web por línea de comando con aspnet_compiler.exe.Aspnet_compiler.exe
La herramienta de compilación de ASP.NET (Aspnet_compiler.exe) hace posible la compilación de una aplicación Web ASP.NET, en el propio lugar donde se encuentra o para implementarse en una ubicación de destino como un servidor de producción
... - El Desarrollador es una especie Ciclica
El Desarrollador es una especie Ciclica
Creo Software -> Creo Errores -> Soluciono Errores -> Creo Software -> Creo Errores -> Soluciono Errores ... etc, etc,... - C#: Diferencia entre (string), Operator as y ToString al leer de un IDataReader
C#: Diferencia entre (string), Operator as y ToString al leer de un IDataReader
Diferencias en la conversión de datos a String cuando trabajamos con bases de datos. Existen diferentes opciones como la conversión explícita o Cast o llamar al método ToString. El objetivo del artículos es entender las diferencias, así entenderemos porque ocurren algunos errores, y porque una opción es más rápida que la otra.Cast (String) and Operator As
(string)Reader[0] o el Operador as es un "cast", una conversión explícita "...if a conversion cannot be made without a risk of losing information,...". En base de datos se aplica cuando se sabe que el campo es de tipo String o puede ser convertido a String sin peligro.... - 3ToDo: Velocidad de Analytics, Imagenes a Efecto Dibujo y Cachear con PHP
3ToDo: Velocidad de Analytics, Imagenes a Efecto Dibujo y Cachear con PHP
3 Cosas a tener en cuenta para Analizar, Diseñar y Desarrollar en nuestros proyectos webs. Medir la velocidad de carga de las páginas en segundos desde Analytics es un dato realmente interesante, para darse cuenta que tipo de páginas son las que más tardan en cargar. En cuanto al diseño, en ocasiones vienen bien imágenes con un Efecto Dibujo (efecto pintado a mano). La idea es poder crear este efecto sin necesidadd de tener conocimientos de PhotoShop. Por último, saber como crear páginas estáticas para la cache a partir de páginas dinámicas PHP.... - Mas sensacion de Velocidad cargando los Script Javascript con Defer y Async
Mas sensacion de Velocidad cargando los Script Javascript con Defer y Async
Cargar Javascript Asíncronamente o al finalizar de cargar la página. Estas diferentes formas de cargar ficheros Javascript permiten aumentar la velocidad de carga de la página. En referencia a la velocidad de carga de nuestra página, los ficheros javascript son elementos muy importantes. ¿Porque? los navegadores se descargan la página de nuestros servidores y pueden descargar varias imágenes en paralelo para ganar tiempo. El problema esta en que mientras está descargando un fichero javascript, se acabo la descarga en paralelo hasta que finalice la descarga. Lo mismo pasa con otro tipo de ficheros, pero vamos a ver que podemos hacer con el Javascript.Recomendaciones
... - xDebug Php For NetBeans and EasyPhp
xDebug Php For NetBeans and EasyPhp
Como Configurar xDebug en EasyPhp para poder debuggar desde NetBeans. Poder poner BreakPoints (Puntos de Ruptura) en desarrollos es importante, tanto que no pensamos en desarrollar sin esta posibilidad. El problema es que con Desarrollos PHP esta configuración no viene preestablecida por defecto, y el motivo es porque PHP no pose un IDE oficial. Nosotros utilizamos NetBeans para el Desarrollo Web en PHP, este es nuestro IDE, y por eso vamos a configurar la librería xDebug para poder debugar nuestro código PHP en NetBeans. PHP es código de servidor, por lo que necesita un Servidor Web. EasyPhp es un paquete de instalación que provee de Apache + PHP + MySql configurados por Defecto, toda una ventaja para los entornos de desarrollo.Pasos para Configurar xDebug en EasyPhp
... - Configurar Servidor Subversion en DropBox
Configurar Servidor Subversion en DropBox
Como configurar un servidor subversion gratuito utilizando Dropbox como repositorio de código. Dropbox es un almacenamiento de disco duro alojado en la Nube, accesible desde cualquier ordenador con conexión a Internet y cualquier sistema operativo. Subversion es uno de las aplicaciones más extendidas para la gestión y control del código fuente.Idea Previa
Subversion sirve para el control de versiones de nuestro desarrollo. Consta de una parte Servidor y de otra Cliente. La parte Cliente la gestiono con Tortoise, ¿Pero donde ubico el Servidor y que sea accesible desde todos mis Ordenadores? ¿Y Gratuito?. DropBox almacena información en la Nube y puedo acceder a mis datos desde cualquier Ordenador. ¿Puedo utilizarlo como Servidor Subversion? ¿Como instalo el Servidor de Subversion en el Disco Duro Virtual de DropBox?... - Ejecutar iisreset desde codigo y como saber si se ha reiniciado el iis
Ejecutar iisreset desde codigo y como saber si se ha reiniciado el iis
Para reiniciar el IIS sólo hay que ejecutar el Comando iisreset. El comando iisreset.exe se encuentra en "C:\Windows\System32\". Cada vez que se ejecute parará todos los servicios web y los volverá a iniciar. Para saber y conocer el registro del servicio IIS hay que ir al "Visor de Sucesos" subapartado "Sistema". El origen del log es IISCTLS. Al ejecutar el comando iisreset veremos dos logs del tipo:Recibido comando de detención de IIS del usuario NT AUTHORITY\SYSTEM. El dato registrado es el código de estado.
Recibido comando de inicio de IIS del usuario NT AUTHORITY\SYSTEM. El dato registrado es el código de estado.
Código para Ejecutar el Comando iisreset desde C# .Net
... - Reflection: Utilidades para Crear y Ejecutar Metodos de clases Dinamicas
Reflection: Utilidades para Crear y Ejecutar Metodos de clases Dinamicas
Como podemos crear o invocar métodos de clases dinámicas en C# .NET. La clave se encuentra en el espacio de nombres (namespace) System.Reflection del Framework de .Net para crear y utilizar métodos o propiedades dinámicas. Este "namespace" nos permite crear Clases dinámicamente, obtener sus propiedades o invocar a métodos concretos, entre otras cosas. Cuando deseamos realizar alguna operación dinámica con alguna Class o Type concreto es muy posible que acabemos en este espacio de nombres.... - Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
La configuración del IIS es incorrecta. En las propiedades del Sitio Web configurado en el ISS, configurar en la pestaña ASP.NET el Framework 4.0 en lugar de la versión 2.0. Para las soluciones sencillas y rápidas. Que todo sea esto.... - C#: Convert DbType to SqlDBType
C#: Convert DbType to SqlDBType
Clase para convertir de tipos de datos .net (dbType) a tipos de datos de base de datos (SqlDbType). La clase esta extraída de dotnetpulse que es quien realmente ha realizado todo el trabajo, por lo que el mérito es de ellos. Pero como es una clase realmente interesante y muy útil, he decidido que también quería guardarla en los apuntes de tectonilogia.com. El uso es realmente sencillo para convertir entre tipos de datos .Net Type , SqlDbType and DbType._DbType = DbConverter.ToDbType(mySqldbType); _SqlDbType = DbConverter.ToSqlDbType(myDbType);Clase para convertir datos de base de datos
... - Application Configuration File: App.Config para una Class Library
Application Configuration File: App.Config para una Class Library
Fichero de configuración de la aplicación para una librería de clases c#. Se puede cargar el fichero App.Config de un Assembly cualquiera. También tenemos la libertad de crear y definir nuestra propia section en el fichero de configuración, para poder cargar la información en una clase propia. Sabiendo que una librería puede tener su propio fichero de configuración y que podemos crear clases personalizadas ¿Que nos queda? ¿Saber donde se ubicará el fichero? Tenemos que pensar donde estará ubicado y como gestionaremos la información de este fichero. La elección es nuestra. Es decir, si tenemos un sitio web con su fichero de configuración web.config y una librería con un app.config ¿Donde ubicaremos la información de la librería y como la cargamos? ¿porque no utilizamos el fichero de la aplicación?.... - C#: Crear Secciones Personalizadas en el Fichero de Configuracion app.config,web.config
C#: Crear Secciones Personalizadas en el Fichero de Configuracion app.config,web.config
El app.config o el web.config son ficheros de configuración que ofrece .Net., aparte del fichero de recursos de Settings. Por defecto estos ficheros ya posen secciones para almacenar diferentes settings sencillos (appSettings) y para las cadenas de conexión (connectionstrings). Pero en algunos casos podemos personalizar y crear nuestra propia section y su clase asociada para poder trabajar con los datos.Crear una Section Personalizada siguiendo un ejemplo
Comezaremos mostrando una seccion personalizada que iría dentro del app.config o web.config del proyecto.... - C# .NET: Sobrecarga,Polimorfismo y Reutilizar Constructores
C# .NET: Sobrecarga,Polimorfismo y Reutilizar Constructores
Clase escrita en C# .Net con diferentes constructores. Llamar de un constructor de una clase a otro constructor de la misma clase o al constructor del padre. Este caso es más común de lo que parece y el Polimorfismo de métodos (Aunque sean constructores) es recomendable.... - Bug: Bicho, Cucaracha, Polilla y Error Informatico
Bug: Bicho, Cucaracha, Polilla y Error Informatico
El Ordenador Mark II (1945) durante la segunda guerra mundial dejó de funcionar porque una "Polilla" se depositó en un relé provocando un mal funcionamiento. Fue la Primera vez que un Bicho real provocó un error informático. Gracias a esta incidencia, la palabra Bug adquirió más peso para determinar un mal funcionamiento dentro del mundo de la informática y la tecnología. Aunque realmente en la época de Thomas Edisson ya se utilizaba el término "Bug" para indicarcualquier fallo o problema en las conexiones o funcionamiento de aparatos eléctricos
Más Información
blogodisea microsiervos... - CSS: Especifico para IE, Generador de Textos y Hacks
CSS: Especifico para IE, Generador de Textos y Hacks
Trucos Online CSS para generar efectos de texto con CSS, hacks específicos para el navegador Internet Explorer o generar clases de estilos que sean compatibles con todos los Navegadores. CSS Específico para IE en webdesignerwall. CSS condicionales y hacks para las diferentes versiones de Internet Explorer. Generador de Textos con efectos CSS en puntogeek. CSS Prefixer. Genera estilos para todos los navegadores con sus "Hacks" (Cross-Browsers) dzign... - No se puede cargar el archivo o ensamblado System.Web.Extensions Version=1.0.61025.0
No se puede cargar el archivo o ensamblado System.Web.Extensions Version=1.0.61025.0
Error No se puede cargar el archivo o ensamblado System.Web.Extensions Version=1.0.61025.0. En Servidor Windows 2003 Server con aplicaciones Web Asp.Net. En un entorno donde la version instalada de la aplicación web funcionaba, ha comenzado ha dar error en el fichero Web.config, indicando que no se puede cargar el ensamblado System.Web.Extensions.Problema
... - Frases de Programacion
Frases de Programacion
Recopilación y lista de Frases relacionadas con la programación del tipoLa programación es una carrera entre los desarrolladores, intentando construir mayores y mejores programas a prueba de idiotas, y el universo, intentanto producir mayores y mejores idiotas. Por ahora va ganando el Universo
... - El Ingeniero, El Comercial y la Consultora en un proyecto externo
El Ingeniero, El Comercial y la Consultora en un proyecto externo
Cuando las empresas externalizan proyectos a consultoras. Fred de Sinergias sin Control no hace una fantástica viñeta donde no los explica bien, bien. Fuente... - Remember: Find en las Listas Genéricas
Remember: Find en las Listas Genéricas
Utilizar el Find Predicate<T> con delegate en una sola línea. Cuando utilizamos Listas genéricas e posible que en algún momento tengamos que Buscar Elemento para obtener el elemento concreto de la lista. Realizar operaciones y continuar con nuestro proceso. Dado que no es un código que se esté "picando" cada día, recordemos como se hace el Find de un Elemento en una Lista Genérica y con una sóla línea.function MyClass FindByKey(List<MyClass> list, string key) { return list.Find(delegate(MyClass item) {return (item.Key == key);} ); }Estudiamos el Código
Delegate(MyClass item), define el método de búsqueda. Podría crearse un método nuevo con los parámetros adecuados tal como se explica en la MSDN. {return (item.Key == key)}, es el código del método de búsqueda, que parámetros y propiedades se van a utilizar para la comparación.Referencias
List <T> Generic Predicate <T> Delegate... - Tips CSS: Efecto Hover, Gaussiano, Texto 3D y Sombras sin Imagenes
Tips CSS: Efecto Hover, Gaussiano, Texto 3D y Sombras sin Imagenes
Algunos Trucos CSS que hemos ido encontrado los últimos días, de los cuales creamos una lista para que no se queden los enlaces en el olvido. Desenfoque Gaussiano y Texto en 3D con CSS3 dzign.us ToolTip CSS3 Evento OnHover (Hover) PureCSS3 CSS Clearing Floats with Overflow webdesignerwall CCS Drop Shadows without images nicolasgallagher... - Estilos de Sombras con CSS sin Imagenes
Estilos de Sombras con CSS sin Imagenes
Sorprendente utilización de las sombras con CSS sin utilizar imagenes. Diferentes efectos de Sombras con CSS sin imagenes que consiguen efectos asombrosos como levantar esquinas, curvar esquinas, perpectiva, levantar conjunto, rotar, personalizar sombras en vertical o horizontal. Podemos usar el efecto que mejor nos convenga, veamos por ejemplo como rotar y aplicarle sombra.... - Hosting Frameworks Librerias Javascript en Google
Hosting Frameworks Librerias Javascript en Google
Google ofrece un Hosting de Frameworks Javascript en Google Libraries API, donde podemos utilzar sus urls o sus métodos para cargar el Frameworks o Librería Javascript que nos interese. Chrome Frame Dojo Ext Core jQuery jQuery UI MooTools Prototype script_aculo_us SWFObject Yahoo! User Interface Library (YUI) WebFont Loader Para quien no lo sepa.... - All Cheat Sheets en Cheat-Sheets.org
All Cheat Sheets en Cheat-Sheets.org
Mini chuletas y manuales de referencias de todo. "Quick Reference Guide" de diferentes lenguajes de programación, sistemas o cualquier ayuda rápida que queremos encontrar. las "Cheat Sheets" son Chuletas o Hojas de Trucos tipo esquemas que te muestran todos los métodos o utilidades más importantes de un lenguaje o sistema concreto. Recientemente he encontrado una página encargada en recopilar y reorganizar las Mini Guias Rápidas en un sólo lugar, con la posibilidad de descargar o de visualizar.http://www.cheat-sheets.org/
Espero que os sirvan como a mi.... - Crear Templates de Clases para Listas Genericas
Crear Templates de Clases para Listas Genericas
El Uso de Genéricos en el desarrollo de aplicaciones es ir un paso adelante en el uso de la herencia, polimorfismo y la programación orientada a objetos. Consiste en definir operaciones, usos y métodos para tipos de datos genéricos. El uso de Templates y Genéricos en el futuro hace ahorrar tiempo de construcción y rendimiento en algunas operaciones (Sobretodo porque no hay que hacer Cast ni Converts). A continuación vamos a explicar las bases para crear clases aplicables a listas genéricas.Código clases Templates de Genéricos
Al Definir MyList<T>, estamos definiendo una lista Genérica tipo List<T>, pero además le indicamos que la clase T tiene que ser del tipo TemplateBase....public abstract class TemplateBase { //Constructor public TemplateBase() {} public void SomeMethod() { //Do Some Code } public abstract void OtherMethod(); } public class Item : TemplateBase { public override void OtherMethod() { //Do Special Item Code } } public class MyList<T> : List<T> where T : TemplateBase, new() { public void SpecialCode() { //Special List Code //... } } - Rendimiento y Diferencia entre ArrayList y GenericList
Rendimiento y Diferencia entre ArrayList y GenericList
Buscando información me encontré con El uso de Genéricos (List) es mucho más eficaz que el uso de Arrays. El Uso de genéricos List<T> es superior al uso de ArrayList cuando: Con ArrayList hay que realizar Cast, Convert al Agregar y al Obtener el valor. (value = (ObjetType)Lista[i]; ) En operaciones de Equals o Compare Con tipos de datos primitivos, ya que se realizan operaciones de conversion definidas por nosotros, o implicitas por la naturaleza del tipo de dato. Con el Uso de Genéricos y las interfaces IEquatable y IComparable, el tipo de datos es el definido por la clase T, por lo que ya no es necesario realizar Cast ni Converts. El Aumento de Rendimiento viene dado por ahorrarse esta operación. Para información mucho más detallada ver Comprobación del Rendimiento de los Genéricos... - Uso Interfaces IEquatable y IComparable con Equal, CompareTo, Contains y Sort
Uso Interfaces IEquatable y IComparable con Equal, CompareTo, Contains y Sort
Cuando tenemos que hacer comparaciones y ordenaciones entre elementos de una lista. IEquatable y IComparable son las interfaces que ofrece el Framework de .Net para que podamos comparar y ordenar nuestras listas genéricas. Imaginad que tenemos una lista List<T>, donde T es una clase Propia. Tenemos una Lista con varios elementos.¿Que necesitamos de una Lista Genérica?
¿Poder Comparar Elementos? ¿Poder Ordenar la lista? Para poder comparar elementos es la interfaz IEquatable y para poder Ordenar la lista la interfaz IComparable.... - Haz el Cambio pero que no afecte en la fecha ¿Como?
Haz el Cambio pero que no afecte en la fecha ¿Como?
¿Cuantas veces hemos escuchado esto? ¿Que ha significado?... - Diferencia entre Session y ViewState
Diferencia entre Session y ViewState
Las diferencias más importantes entre Session y ViewState en ASP.NET. El ViewState es más limitado y es para información sencilla. Incluso te puedes encontrar que almacenas información que se guarda o actualiza a través de otros procesos y que no se refresca correctamente. Creo que es debido a que el ViewState viaja del cliente al servidor, se procesa y vuelve, y si no existe un PostBack por medio, por mucho que actualices la información no se mantendrán los cambios, ya que la próxima vez que se genere un PostBack la información se reiniciará con la que tenía guardada en la parte del Cliente. La Session suele utilizarse para compartir información entre páginas, de más envergadura y con procesos más complejos.... - Como hacer el Update de una Pagina aspx con un UpdatePanel, un Thread y un Timer
Como hacer el Update de una Pagina aspx con un UpdatePanel, un Thread y un Timer
Generar un proceso largo que actualice el contenido de la página desde un Thread y a través de un UpdatePanel. Cuando queremos generar un proceso muy largo desde una aplicación web, y queremos que el progreso del proceso actualice información de la página web, podemos hacerlo con un UpdatePanel y un poco más. Cuando el proceso que queremos ejecutar es tan pesado que decidimos ponerlo dentro de un Thread, aún complicamos más el refresco de pantalla, por eso vamos a exponer los pasos y los conceptos.Update Panel
El UpdatePanel utiliza tecnología Ajax para actualizar una parte de la página web, y no forzar el refresco de la página entera. Una técnica muy utilizada en aplicaciones asp.net. Imaginemos que tenemos el siguiente UpdatePanel.
Cuando pulsamos sobre el botón "BtnExecute1" podemos actualizar la label "lblActualizar" y refresacará sólo el UpdatePanel. Para ello podemos utilizar el método Update del UpdatePanel.<asp:UpdatePanel ID="updProgreso" runat="server" UpdateMode="conditional"> <ContentTemplate> <asp:Label ID="lblActualizar" runat="server" Text=""></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="BtnExecute1"/> </Triggers> </asp:UpdatePanel>
Desde la parte del cliente viaja a la parte del Servidor, y cuando regresa es cuando actualiza el contenido de la etiqueta....lblActualizar.Text = "Actualizamos la etiqueta"; updProgreso.Update(); - Cuando se cambian los Requerimientos
Cuando se cambian los Requerimientos
Al finalizar las pruebas de aceptación del Cliente. Desarrollos Cortos/Rápidos y Pruebas escasas/nulas... - Como Permitir Acentos en la URL con .NET
Como Permitir Acentos en la URL con .NET
¿Acentos en la URL? en ocasiones se generan urls automáticas con parámetros, los cuales tienen acentos. Esto puede dar problemas con el encoding a la hora de recuperar la información. Dependiendo de la aplicación y las necesidades de cada uno pueden solucionarse el problema de diferentes formas. Si por el ejemplo son dos aplicaciones que se envían información mediante "http", lo más normal es utilizar las clases "System.Web.HttpUtility.UrlEncode" o "System.Web.HttpUtility.UrlDecode", definiendo previamente el "Encoding" que se va a utilizar. Pero esta solución en ocasiones no es posible aplicarla. En mi caso particular, cuando la url se genera desde un Word. El Documento Word llama a una página web la cual recibe una serie de parámetros. Los parámetros que recibe la página web pueden llegar a tener acentos. En este caso no puedo utilizar las clases encode y decode y es necesaria otra solución.Configurando el Encoding en el Web.Config
El problema se ha solucionado configurando las url de entrada y salidas con un encoding capaz de soportar acentos.
De esta forma cuando se quiere recuperar un parámetro a través del QueryString["campo"], da igual que el valor del parámetro tenaga o no acento, porque lo recupera correctamente....<system.web> ... <globalization requestEncoding="windows-1252" responseEncoding="windows-1252" culture="es-ES"/> ... </system.web> - IncludeText y agrega una pagina web en un documento word
IncludeText y agrega una pagina web en un documento word
Con la posibilidad del MergeField puedes generar Plantillas Word para combinar correspondencia. Para eso es preciso conectar un documento word conectado a una consulta de base de datos o similar. Pero que ocurre cuando la consulta es demasiado compleja o cuando queremos mostrar información que no se puede obtener a través de la consulta original. Con el Campo IncludeText podemos incluir un fichero de texto.Inserta el texto y los elementos gráficos contenidos en el documento indicado. Puede insertar el documento completo o una parte del mismo. Si es un documento de Microsoft Word, sólo puede insertar la parte a la que hace referencia un marcador o si el documento es un archivo XML, sólo puede insertar el fragmento al que hace referencia una expresión XPath. Anteriormente, este campo se denominaba campo INCLUDE
Gracias al Campo IncludeText podemos incluir dentro de un documento Word la información de una página web de la siguiente forma
IncludeText llama a mipagina.aspx, esta recupera el valor pasado como parámetro y construye el html. El Word recupera el Html generado y lo pinta dentro de la plantilla. Supongo que no se podrán construir páginas muy complicadas, pero a mi para generar Tablas y mostrar datos me funciona de sobra. Como requerimiento es necesario tener una aplicación web en la misma máquina desde donde se genera la plantilla Word. Esto no es posible en muchos casos. Espero que sea de ayudar....{IF 1 = 1 "{INCLUDETEXT "http://localhost/CustomWeb/mipagina.aspx?id={REF NombreCampoId}}" ""} - ¿Es mas caro el Codigo Abierto que el de Propietario?
¿Es mas caro el Codigo Abierto que el de Propietario?
Al parecer han realizado un Estudio y a la larga es posible que el Coste por utilizar Codigo Abierto salga mayor. Coste Aprendizaje, Adaptaciones, ... Más en TheInquerer... - Goo.gl, Trucos Wordpress, Webs desarrollo Web y más Herramientas
Goo.gl, Trucos Wordpress, Webs desarrollo Web y más Herramientas
Enlaces interesantes sobre desarrollo y tecnología de esta semana Blogs de Desarrollo Web Lista con 50 Blogs de desarrollo y tecnología. Apuntados para echarle un vistazo y seguir a unos cuantos. namespace con Javascript Interesante Artículo sobre javascript, información de porque no utilizar variables Globales y como deberíamos hacerlo. Trucos Wordpress Lista con 30 posibilidades sobre Wordpress. Por lo menos a algunos puntos les echaré un vistazo con más atención. API goo.gl Otro acortador de enlaces tipo bit.ly, pero este es de Google Crear un Avatar Online Herramienta online para crear tu propio Avatar. Me la guardo porque cuando tenga tiempo modifico y adapto el Theme del Blog. Chrowety Una extensión para chrome que es un cliente para Twitter... - No quien mas corre llega mejor
No quien mas corre llega mejor
Como en todo, quien desarrolla paso a paso y de forma ordenada, obtendrá mejores resultados en la entrega.... - Lo Mejor de #Tectonilogia del 2010
Lo Mejor de #Tectonilogia del 2010
Recopilación de Artículos publicado en Tectonilogia.com. De todo lo que se ha escrito el pasado año, vamos a refrescar aquellos artículos agrupados por su categoría principal (Ayuda Técnica, Diseño, Moviles, Programacion, Seguridad, Sistemas). No vamos a refrescar los artículos más visitados, sino que en su lugar ponemos en una lista todos los artículos que desde nuestro punto de vista nos parecen mejores y más interesantes.Ayuda Técnica
73+ Plugins Con Ajax ,Seguridad, Mantenimiento y otros Recopilación de plugins interesantes para Wordpress Alternativa al Adsense Asincrono, para mejorar la velocidad De momento Adsense no es Asíncrono, una de las mejores maneras para cargar el Script y que impacte lo menos posible en el rendimiento de la página. Insertar Codigo Html, Php, … desde un QuickTag de WordPress Código Javascript llamado desde el QuickTag de Wordpress, para que transforme los carácteres "especiales" en ASCII HTML. Listado completo de Ayuda TécnicaDiseño
Round-Corners y Gradient CSS para Todos los Navegadores Colección de Colección de Iconos Efecto Llamas con PhotoShop Listado completo de DiseñoMoviles
Aunque los artículos han estado centrados en las grandes novedades y características de los Smartphones Android o IPhone. Aplicaciones Android utiles para el Movil Destacar un artículo específico de Libros y Herramientas para Leer Libros en Android Htc Wildfire vs Htc Desire Apple con lo Nuevo y los Problemas del IPhone 4 Aunque todavía sigue siendo el Smartphone mejor considerado por muchos (Rendimiento, Pantalla, Navegación) Listado completo de MovilesProgramación
Errores Tipicos de bases de datos cometidos por los Desarrolladores Llamadas al servidor desde el cliente con DoCallBack y DoPostBack ASP.NET Como crear una Sesion Infinita o que no caduca nunca Como ejemplo de las diferentes herramientas que podemos encontrar en esta Categoría. Listado completo de ProgramaciónSeguridad
Centrado en como prevenir Malware utilizando el sentido común (si se puede), recomendando Antivirus y prevenir de las nuevas amenazas que surgen. El Mejor Antivirus 2010 / 2011 Stuxnet, el virus informatico que infecta a las infraestructuras de un Pais El Virus Informático más importante y problemático hasta el momento 4 Antivirus Online, Herramientas para Escanear Virus Listado completo de SeguridadConclusiones
Y que vengan muchos más. ¿Alguno que queráis recomendar vosotros?... - No anticipemos el peor escenario
No anticipemos el peor escenario
Llamado "management por desconocimento feliz" Twiteado por Feed_SSC. Un claro ejemplo de que tenemos que tener claro los escenarios y los casos de uso antes de ponernos a desarrollar. El Peor Escenario es posible, por lo que debe tener en cuenta.... - Mejorando el Convert.ToBoolean(String) del Framework .Net
Mejorando el Convert.ToBoolean(String) del Framework .Net
Convertir diferentes tipos de valores Lógicos de String a Boolean, por ejemplo "true", "TRUE", "1", "Si". La mejora de crear un nuevo Convert.ToBoolean nace porque el método Convert.ToBoolean(String) se basa en los valores Boolean.TrueString ("True") y Boolean.FalseString ("False"), que en realidad son constantes, así que si no utilizas estos valores específicamente el método no devolverá el resultado esperado. Pero en ocasiones el String que pasamos como valor Lógico puede ser un "0" o un "1", o más específicamente un "Si" o un "No".Comentarios del MSDN
En el MSDN nos comentan que si los valores tipo String del parámetro no son los correctos, nos lanzará una excepción. Por lo que una opción sería utilizar el Método Boolean.TryParse si no queremos tener que tratar las excepciones.Para que la conversión se realice correctamente, el parámetro value debe ser igual a una constante Boolean.TrueString, cuyo valor es True, a una constante Boolean.FalseString, cuyo valor es False o debe ser null. Para comparar value con Boolean.TrueString y Boolean.FalseString, el método omite el uso de mayúsculas y minúsculas, así como los espacios en blanco iniciales y finales. Si prefiere no controlar una excepción si la conversión da error, puede llamar al método Boolean.TryParse en su lugar. Devuelve un valor Boolean que indica si la conversión finalizó correctamente o no.
Mejora Convert.ToBoolean
Dado que el método Convert.ToBoolean no me servía para las conversiones que necesitaba realizar, además de que quería dejar el código más legible. He creado una nueva clase para Convertir de String a Boolean.public class ConvertBoolean { /// <summary> /// Convert to Boolean from String True if is "true", "1", "si" /// </summary> /// <param name="value">String (true, TRUE, 1, si,</param> /// <returns>Boolean</returns> public static bool FromString(string value) { try { string aux = value.ToLower(); if ((aux == "true") || (aux == "1") || (aux == "si")) { return true; } else { return false; } } catch { //por defecto return false; } } }Conclusiones
Que os aproveche!!!... - Programar a lo Minority Report con Kinect
Programar a lo Minority Report con Kinect
La Tecnología Kinect también quieren aplicarla al Visual Studio para Desarrollar, de esta forma se podrá Programar de pie, moviendo el cuerpo, realizando gestos preestablecidos y generar interfaz de usuario al estilo Minority Report. Este tipo de programación se denomina Programación Gestual, y Microsoft sacará un nuevo Visual Studio Kinect Studio para poder programar utilizando los movimientos del cuerpo. Seguramente esta nueva forma de programar provocará que disminuyan los problemas de espalda, cuello, contracturas, malestares que todos los programadores antes o después hemos sufrido. Más información en Programación Gestual Visual... - Encoded Word Encoding con .Net C#
Encoded Word Encoding con .Net C#
Como Obtener el Valor del Encoding de Palabras definido en el MIME Encoded-Word. En la comunicación SMTP, desde el RFC 2822, todos los nombres y valores de la cabecera (Header) del mensaje deben enviarse con el Encoding ASCII. Pero si se desean enviar carácteres con valores no-ASCII se debe codificar el valor del Header usando la sintaxi indicada en el MIME encoded-word (RFC 2047). La sintaxis usa un string con carácteres ASCII que indica el encoding "charset" y el "content-transfer-encoding", para poder obtener el valor correcto. Es Decir, en el mismo valor se manda la información, el charset y el encoding en un formato concreto.El formato de MIME encoded-word es
El Encoding podría contener dos valores. "Q" y "B", "Q" denota Q-encoding que es lo mismo que quoted-printable, y "B" denota base64. Por lo que si sabemos el charset y el encoding, podemos decodificar el texto que marcado como "encoded-text"=?charset?encoding?encoded text?=Codigo Decode Encoded-Word en .Net C#
using System.Text.RegularExpressions; using System.Net.Mail;
via vsevolodp Actualización 09/01/2011 No funciona en todos los Casos, pero si que resuelve la gran cantidad de mis necesidades...public class EncodedWordEncoding { public static string Decode(string encodedText) { if (encodedText == null) return null; Regex regex = new Regex(@"=\?(?<charset>.*?)\?(?<encoding>[qQbB])\?(?<value>.*?)\?="); string encodedString = encodedText; string decodedString = string.Empty; bool encodedWordBefore = false; while (encodedString.Length > 0) { Match match = regex.Match(encodedString); if (match.Success) { // If the match isn't at the start of the string, copy the initial few chars to the output string beforeMatch = encodedString.Substring(0, match.Index); // Filter out space chars between encoded words if (encodedWordBefore) { Regex regex2 = new Regex(@"(\r?\n|\r)*[ \t]+"); Match match2 = regex2.Match(beforeMatch); if (match2.Success && match2.Value == beforeMatch) beforeMatch = ""; } decodedString += beforeMatch; string charset = match.Groups["charset"].Value; string encoding = match.Groups["encoding"].Value.ToUpper(); string value = match.Groups["value"].Value; if (encoding.Equals("B")) { // Encoded value is Base-64 byte[] bytes = Convert.FromBase64String(value); decodedString += Encoding.GetEncoding(charset).GetString(bytes); } else if (encoding.Equals("Q")) { // Use .NET library to decode decodedString += Attachment.CreateAttachmentFromString("", match.Value).Name; } else { // Encoded value not known, return original string // (Match should not be successful in this case, so this code may never get hit) decodedString += encodedString; break; } // Trim off up to and including the match, then we'll loop and try matching again. encodedString = encodedString.Substring(match.Index + match.Length); encodedWordBefore = true; } else { // No match, not encoded, return original string decodedString += encodedString; break; } } return decodedString; } } - Error de Analizador. Application ASP.NET, Web Site y Virtual Directory
Error de Analizador. Application ASP.NET, Web Site y Virtual Directory
Error de Analizador. No se puede cargar el Compilado al Publicar una Aplicación Web en ASP.NET. Hace poco he tenido un problemilla que me ha tenido ocupado un tiempo. El problema surge al publicar una aplicación web con ASP.NET precompilada al Servidor. Cuando le das a Publicar una Aplicación Web (Publish Web Site) desde el Visual Studio 2005, y cuando decides instalar la aplicación en el servidor da error (Recomiendo no esperar al último momento para hacer este paso. Por suerte no era este mi caso). Al poner la aplicación publicada (Compilada) aparecía el siguiente error.Error del analizador Descripción: Error al analizar el recurso requerido para dar servicio a esta solicitud. Revise los detalles de error de análisis específicos y modifique el archivo de código fuente en consecuencia. Mensaje de error del analizador: No se puede cargar el ensamblado 'App_Web_jok6qv5y'. Asegúrese de que está compilado antes de obtener acceso a la página.
Si por el contrario copiaba una página en particular con el fichero .aspx y .cs, la página se compilaba sin ningún problema y se cargaba sin error. Al Publicar una Aplicación Web con el Visual Studio, lo que hace es compilar todas las páginas para que el código .cs no quede a la vista, y copia el o los ficheros compilados dentro de la carpeta "Bin". Así que el problema que tenía era debido a la compilación, o porque la configuración del IIS no era correcta.Definiciones para Tener Claro los Conceptos
Web Site: Por defecto "Default Web Site" ubicado en "C:\inetpub\wwwroot\". Si creamos un nuevo sitio web, es donde se definirá la Ruta Base de la nueva aplicación Web. Es Decir, un dominio o ip ubicado en una carpeta física, en donde se encontrará la página principal de la aplicación. Virtual Directory: Un directorio virtual es crear dentro de un sitio web una carpeta en un determinado nivel de directorios, pero que en realidad, físicamente esta ubicada en cualquier otro lugar del disco. Normalmente utilizado para indicar donde se encuentran las imágenes, scripts, ... Aplication Web: Es como un directorio virtual, pero con la capacidad de poder ejecutar código ASP.NET. Se pueden crear tantas aplicaciones web asp.net como se quieran dentro de un Web SitePosibles Soluciones
Hemos encontrado 2 posibles opciones para solucionar el Error del Analizador, pero ambas son debido a la configuración realizada en el IIS 1: La más probable es que la versión del ASP.NET configurada en la Aplicación Web no este definida. Si nos fijamos en la parte inferior de la página de Error encontramos un mensaje tipo
La mayoría de los problemas encontrados por Error del Analizador es porque la version del Framework utilizado es la 1.1 y no la 2.0. Se soluciona accediendo a "Propiedades" de la Aplicación Web, y definir la versión del Framework .NET en la pestaña ASP.NET 2: Una Aplicación Web específica se crea dentro de un Sitio Web, pero primero se crea como un Directorio Virtual. Si no le indicamos en las propiedades de la aplicación web, en la pestaña "Virtual Directory", en el apartado "Application Settings" la opción de "Create". No configurará la aplicación como Aplicación ASP.NET. Aunque podrá ejecutar código html o scripts, no podrá ejecutar código precompilado asp.net. Esto es lo que creo, siguiendo estos pasos el problema del Error de Analizador al Publicar una Aplicación Web ASP.NET se ha solucionado. ¿Cual creéis que era mi problema? ¡Menudo Despiste!...Información de versión: Versión de Microsoft .NET Framework:2.0.50727.3615; Versión ASP.NET:2.0.50727.3618 - Cuando Faltan Requerimientos
Cuando Faltan Requerimientos
1) Desarrollador: Cagada la Hemos 2) Cliente: Ves Programando que ya te los iré informando 3) Desarrollador: El Código ya lo he Cambiado 'N' Veces 4) Cliente: No es lo que Buscaba Conclusión: Cuando Faltan Requerimentos Se Tarda Mucho Más Tiempo.... - Service Unavailable en una Pool Aplicaciones del IIS o Proceso w3wp.exe
Service Unavailable en una Pool Aplicaciones del IIS o Proceso w3wp.exe
Cuando con Servidor Web IIS y una Aplicación Web esta con un Servicio No Disponible, podemos verificar una serie de causas. Normalmente es porque el Pool de Aplicaciones o el Proceso w3wp.exe que gestiona la Aplicación Web se ha saturado y se ha parado. Puede ser por rendiemiento del Servidor que esta con altos Picos, incluso del 100% de CPU. Si sospechamos que el problema esta en algún Proceso w3wp.exe, podemos ver con paciencia que proceso w3wp.exe esta dando el problema. Pero lo normal es pensar que la Aplicación Web se ha Parado, y que simplemente reiniciando se soluciona. Si después de reiniciar el IIS (iisreset) o la aplicación web, sigue sin solucionarse el problema entonces la causa es otra.Que Podemos Hacer
Revisar el Visor de Sucesos. Es muy probable que nos encontremos un Error del Tipo Active Server Pages con la siguiente descripción:Error: No se pudo realizar la inicialización de la caché permanente de plantillas para el grupo de aplicaciones 'xxx' debido al siguiente error: No se pudo crear un subdirectorio de caché de disco para el grupo de aplicaciones. Los datos pueden tener códigos de error adicionales..
Este problema es debido a Permisos de Usuario. A mi me ha pasado que la Aplicación Web funcionaba correctamente pero de vez en Cuando daba el Error de Active Server Pages en el Visor de Sucesos. Sospecho que llegado a un punto, y dependiendo de la gravedad del Error, el Pool de Aplicaciones deja de funcionar y da el Error Service Unavailable.Pasos a Seguir Para la Solucion
Abrir el Administrador del IIS (Internet Information Server). Expandir el "Grupo de Aplicaciones". Clic derecho sobre el grupo de aplicaciones "xxx" (el identificador del grupo de aplicaciones para el que el visor de eventos devuelve un error). Seleccionar "Propiedades" e ir a la pestaña "Identidad". Ver el usuario del grupo de aplicaciones. Editar la seguridad de la carpeta: "C:\WINDOWS\system32\inetsrv\ASP Compiled Templates" y dar todos los permisos al usuario del grupo de aplicaciones. Reiniciar el IIS.Recurso Fácil
Reiniciar IIS, Reiniciar Servicios, Reiniciar la Máquina. Quizás se solucionen los problemas inmediatos, pero no se ha solucionado el problema. Ya que el Servidor Web será propenso a que vuelva a dar el Error Service Unavailable en una Aplicación Web. NOTA: En mi caso utilice el Recurso Fácil, funcionó, pero era el Entorno de Desarrollo y no perjudicaba a ningún Usuario. Pasados unos días y con tiempo Revisé los permisos de Usuarios y efectivamente no estaba configurado correctamente.... - Seguimiento en las Transacciones Usando SQLTransaction y un TableAdapter Helper
Seguimiento en las Transacciones Usando SQLTransaction y un TableAdapter Helper
Cuando se quieren utilizar Transacciones en las Base de Datos, es porque se necesitan realizar una serie de Operaciones de forma Atómica. Las operaciones son indivisibles, lo que significa que o se ejecutan todas las operaciones o no se ejecuta ninguna. En el Caso de las Transacciones con las Bases de Datos, si la Transacción ha dado error se hace un "Rollback" para deshacer todos los cambios. El problema escrito en el artículo principal Transaction Tracking Using SQLTransaction, es que necesitaba realizar una serie de Operaciones entre 2 Base de Datos que se encuentran en 2 Servidores diferentes. Por este mismo motivo ha tenido que realizar un Seguimiento de las Transacciones, para saber que si algo ha funcionado mal, deshacer los cambios. No puedes Hacer "Rollback" y deshacer todos los cambios de 2 Bases de Datos Diferentes, tienes que deshacer de forma semimanual. Me parece tan Interesante, que por este mismo motivo vamos a escribir un artículo con los Apuntes necesarios, por si en futuro necesitamos algo parecido con las transacciones.Pasos para los Problemas Y las Soluciones
Se crea un objeto SqlTransaction para la conexión que se conectará a la base de datos. Los objetos Command en los TableAdapter comparten las conexiones. De esta forma no nos preocupamos de asignar el objeto Connection. El objeto Transaction necesita ser asignados a cualquier objeto Command que se utilizará como parte de la transacción para esa conexión. Los objetos Commands no son públic en los Table Adapter. Aquí tenemos el Problema Si queremos que el objeto Connection permanezca abierta en la Transacción, es necesario abrirlo antes de llamar a cualquier método que utilice el Table Adapter.Código .NET
El Código asigna a todos los comandos la Transacción pertinente, justo en el BeginTransaction. De esta forma en los Comandos Update, Insert y Delete ya tienen asignado el Objeto Transaction y podremos hacerle su control de Error.
Pensad que podéis adaptar la clase a vuestras necesidades.using System; using System.Data; using System.Data.SqlClient; using System.Reflection; public class TableAdapterHelper { /// <summary> /// Enlists the table adapter in a transaction. /// </summary> public static System.Data.SqlClient.SqlTransaction BeginTransaction(object tableAdapter) { System.Data.SqlClient.SqlConnection connection = GetConnection(tableAdapter); connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); // get the table adapter's type Type type = tableAdapter.GetType(); // set the transaction on each command // in the adapter PropertyInfo commandsProperty = type.GetProperty("CommandCollection", BindingFlags.NonPublic | BindingFlags.Instance); SqlCommand[] commands = (SqlCommand[])commandsProperty .GetValue(tableAdapter, null); foreach (SqlCommand _command in commands) _command.Transaction = transaction; PropertyInfo adapterPI = type.GetProperty("Adapter", BindingFlags.NonPublic | BindingFlags.Instance); if (adapterPI != null) { object innerAdapter = adapterPI.GetValue(tableAdapter, null); if (((SqlDataAdapter)innerAdapter) .UpdateCommand != null) ((SqlDataAdapter)innerAdapter) .UpdateCommand.Transaction = transaction; if(((SqlDataAdapter)innerAdapter) .InsertCommand != null) ((SqlDataAdapter)innerAdapter) .InsertCommand.Transaction = transaction; if (((SqlDataAdapter)innerAdapter) .DeleteCommand != null) ((SqlDataAdapter)innerAdapter) .DeleteCommand.Transaction = transaction; } return transaction; } private static SqlConnection GetConnection(object tableAdapter) { Type type = tableAdapter.GetType(); PropertyInfo connectionProperty = type.GetProperty("Connection", BindingFlags.NonPublic | BindingFlags.Instance); SqlConnection connection = (SqlConnection)connectionProperty .GetValue(tableAdapter, null); return connection; } }Ejemplo de Uso con las Transacciones
SqlTransaction transaction = TableAdapterHelper.BeginTransaction(Adapter); try { Adapter.Delete(id); } catch (Exception e) { transaction.Rollback(); Adapter.Connection.Close(); throw e; } transaction.Commit(); Adapter.Connection.Close();Conclusión
Código en .Net para gestionar las Transactions de las Bases de Datos. Seguro que existen formas y maneras más sencillas para trabajar con Transacciones en .NET, pero esto da un paso más para esos casos en los el Seguimiento de las Transacciones es vital. Como por ejemplo cuando se necesita realizar entre 2 bases de Datos y encima alojadas en 2 Servidores Diferentes. ¿Os Ayudará este TableAdapter Helper?... - Nuevas Caracteristicas de los Formularios Web en HTML5
Nuevas Caracteristicas de los Formularios Web en HTML5
Las Nuevas propiedades en los Web Forms en HTML5. De las novedades que trae HTML5, nos centraremos en aquellos que están relacionadas con los Formularios Web. Ya se ha hablado de las etiquetas Header, Article, Aside, Section, .... Pero esta vez nos centraremos en los Formularios, y ofrecer la ayuda necesaria para validar y pintar los formularios como es debido.Ejemplos de nuevos tipos de INPUT
La etiqueta para Introducir datos en los formularios.<input type="number"> <input type="range"> <input type="date"> and other date/time controls <input type="color"> <input type="search"> <datalist> element and list attribute <input type="tel"> <input type="email"> <input type="url">Nuevas Formas de Representar Datos
<output> <progress> <meter>Propidades para las Validaciones
required type patternReferencias
Más información en dev.opera.com Y tambíen en JavierCasares en Parte 1 y Parte 2... - Como Activar Thumbnails o Imagen Destacada en Wordpress
Como Activar Thumbnails o Imagen Destacada en Wordpress
Uso de Thumbnails en el Theme de Wordpress. Presentar un artículo mediante un Thumbnails es una técnica muy utilizada, ya que como suele decirse "una imagen vale más que 1000 palabras". Por eso vamos a ver los pasos a seguir para activar y utilizar la opción que ofrece Wordpress en cuanto a la gestión de Thumbnails. Primero Activar la opción del uso de Thumbnails y segundo los métodos necesarios para Utilizar el Thumbnail en el ThemeActivar los Thumbnails
Para Activar los Thumbnails o la Imagen Destacada en Wordpress primero tenemos que modificar el fichero "functions.php" de nuestro Tema de Wordpress y escribir las siguientes líneas de código. De esta forma quedará activada la opción para trabajar con la imagen destacada
Al Activar esta opción aparecerá en la Barra lateral de las "Entradas" la posibilidad de configurar Thumbnails para los Posts, o en su defecto seleccionar cualquier imagen de la Galeria subida.if ( function_exists( 'add_theme_support' ) ) add_theme_support( 'post-thumbnails' );Métodos para la Gestión de Thumbnails en Wordpress
Para mostar y gestionar el Thumbnail en nuestro Theme podemos utilizar los métodos
Post Thumbnails Functions Referenceshas_post_thumbnail(); the_post_thumbnail(); get_post_thumbnail_id(); get_the_post_thumbnail();The_Post_Thumbnail
El Método the_post_thumbnail es el encargado de mostrar la imagen destacada, y tiene la posibilidad de poderles pasar 2 parámetros.
Parámetro $size (string/array) (Optional) Image size. Default: 'post-thumbnail', which theme sets using set_post_thumbnail_size( $width, $height, crop_flag );. Either a string keyword(thumbnail, medium, large or full) or a 2-item array representing width and height in pixels, e.g. array(32,32). Parámetro $attr (array) (Optional) Array of attribute/value pairs. For details, search source for the function that the_post_thumbnail relies on: wp_get_attachment_image Default: None<?php the_post_thumbnail( $size, $attr ); ?>
PD.: Necesario tener versión 2.9 o superior de Wordpress...$default_attr = array( 'src' => $src, 'class' => "attachment-$size", 'alt' => trim(strip_tags( $attachment->post_excerpt )), 'title' => trim(strip_tags( $attachment->post_title )), ); - La Base Minima de toda POO
La Base Minima de toda POO
Alta Cohesión y Bajo Acomplamiento. Lo que debe estar relacionado ponerlo juntito (Alta Cohesion), y ocultar lo que no necesitan conocer las demás parte del Software (Bajo Acomplamiento). Es decir, relacionar con sentido común, y si algo puede ser privado hacerlo privado.... - Errores Tipicos de bases de datos cometidos por los Desarrolladores
Errores Tipicos de bases de datos cometidos por los Desarrolladores
A la pregunta ¿Cuales son los Errores Típicos de los Programadores con las Bases de Datos?, nos encontramos con un curioso listado de estos problemas típicos. La utilización de Índices, complejas consultas para obtener información, y no revisar el rendimiento a no ser que sea necesario.No utilizar Indices
Aunque es fácil de cumplir, muchas programadores no utilizamos una campo Índice cuando utilizamos consultas con Clausulas WHERE. Es más, si tenemos un campo Índice que utilizamos, pero transformamos el valor mediante TOLOWER o TOUPPER, rompemos el índice y queda inservible.No Forzar la Integridad Referencial
No configuramos las bases de datos mediante "Foreign Key", y dejarle la integridad de datos a la base de datos. Normalmente preferimos programar lo que la Base de Datos ya nos ofrece.Uso Natural de las Claves Primarias
Siempre estamos tentados a utilizar claves primarias como ID Autonuméricos o Secuencias, en lugar de utilizar campos únicos naturales en la funcionalidad del Negocio. Como por ejemplo el NIF, Email, etc. Más fácil de utilizar.El Uso de escribir Consultas con DISTINCT
El DISTINCT obliga a que no se recuperen filas duplicadas. Lo cual suele significar que existen errores de base y que deberían solucionarse. El Distinct podría utilizarse de forma provisional, pero hay que tener en cuenta que el Rendimiento de la consulta se ve afectada.Favorecer la Agregación en lugar de los JOINS
Normalmente se usan sentencias GROUP BY y HAVING TO en lugar de utilizar los JOINS. Esto implica en un alto coste en el rendimiento de la consulta ¡Haced la Prueba!No Simplicar consultas complejas en Vistas
Aunque nuestra cabeza de desarrollador nos facilita la tarea de abstraer y dividir complejos métodos en funciones. No tenemos este aspecto interiorizado en las Bases de Datos. La creación de Vistas simplifica la complejidad y nos ayuda a realizar otro tipo de consultas relacionadas.No Normalizar suficiente o Normalizar Demasiado
La Normalización no es una Técnica Exacta, y siempre tenemos que tener el sentido Común presente. Cuando grabamos Arrays en las Bases de Datos, estos valores deberían estar relacionados mediante tablas con sus correspondientes filas. Por contra, el exceso en la normalización provocará que las consultas tengan que tener demasiados JOINS para obtener los datos.Relaciones Exclusivas
Cuando se relacionan tablas mediantes Foreign Keys, pero sólo uno de los campos puede ser Not-Null. Las Foreign Key deberían ser Not-Null, sino puede provocar serios problemas en la integridad de los datos.El uso de OR en lugar de AND
Con un AND se puede hacer los mismo que un OR, pero es más restrictivo y mucho más eficiente.No diseñar Modelos para el Alto Rendimiento
Cuando para obtener datos sencillos se tienen que generar complejas consultas, es debido a que existe un problema de base en el modelo de la base de datos. Visto en Database development mistakes made by application developers... - Round-Corners y Gradient CSS para Todos los Navegadores
Round-Corners y Gradient CSS para Todos los Navegadores
Bordes Redondos y fondo degradado en todos los navegadores. Con CSS3 aparecen nuevas propiedades como border-radius, text-shadow o box-shadow. El problema es que todos los navegadores No cumplen con CSS3, por eso el poder utilizar un estilo CSS de bordes redondos o fondos degradados que funcione en todos los navegadores es un poco más difícil.Bordes Redondos Con CSS
Poniendo las siguientes líneas funciona en todos los navegadores. Como siempre tenemos la Excepción del Internet Explorer, pero para eso los chicos de google nos proporcionan un código Javascript que redondea el "Elemento" en función de lo indicado en la propiedad "border-radius". Este código es un fichero llamado "border-radius.htc" que hay que copiar en la raiz de nuestra página web (o Theme de Wordpress). .box-rounded{ background-color:#CEE3F6; color:#0101DF; width: 300px; margin: auto; padding-left: 30px; -moz-border-radius: 20px; -webkit-border-radius: 20px; -khtml-border-radius: 20px; border-radius: 20px; behavior: url(border-radius.htc); } .box-gradient{ background:#CEE3F6; color:#0101DF; border: 1px solid navy; margin: auto; padding-left: 30px; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#CEE3F6', endColorstr='#ffffff'); /* for IE */ background: -webkit-gradient(linear, left top, left bottom, from(#CEE3F6), to(#fff)); /* for webkit browsers */ background: -moz-linear-gradient(top, #CEE3F6, #fff); /* for firefox 3.6+ */ } .box-shadow-down{ -moz-box-shadow: 5px 5px 5px #888; -webkit-box-shadow: 5px 5px 5px #888; box-shadow: 5px 5px 5px #888; } .box-rounded{ background-color:#CEE3F6; width: 300px; margin: auto; padding-left: 30px; /*Para Redondear Bordes*/ -moz-border-radius: 20px; -webkit-border-radius: 20px; -khtml-border-radius: 20px; border-radius: 20px; behavior: url(border-radius.htc); } El código podemos descargarlo de code.google - curved-cornerFondo Degradado Con CSS
El Degradado también requiere de 3 líneas en el Estilo CSS, de esta forma se verá el fondo degradado en todos los Navegadores. Con Internet Explorer también se ve el degradado, aunque tenemos menos opciones de configuración. .box-gradient{ background:#CEE3F6; border: 1px solid navy; margin: auto; padding-left: 30px; /*Para Fondo degradado*/ /* for IE */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#CEE3F6', endColorstr='#ffffff'); /* for webkit browsers */ background: -webkit-gradient(linear, left top, left bottom, from(#CEE3F6), to(#fff)); /* for firefox 3.6+ */ background: -moz-linear-gradient(top, #CEE3F6, #fff); }Bordes Redondos y Fondo Degradado Con CSS
Si juntamos dentro de un estilo CSS las propiedades del Borde Redondo y lo del Fondo Degradado, podemos tener un "elemento" con Bordes Redondos y Fondos Degradados. Como siempre Internet Explorer es una Excepción y los dos estilos no conseguimos hacer que funcione. Aplicando las clases CSS box-gradient y box-rounded al mismo elemento tenemos Bordes Redondos y DegradadoDegradado Redondo Sombra y CSS
Ejemplo Anterior + Propiedad sombra del CSS3 ¡combinando estilos!Referencias
Más información sobre Redondear Bordes en Border Round Corner With CSS Más información sobre Degradados en CSS en Gradient CSS Cross Browsers Más información sobre Las Sombras del CSS3 en box-shadow, features CSS3... - Herramientas para Optimizar Imagenes Online en momentos de apuros
Herramientas para Optimizar Imagenes Online en momentos de apuros
Las imágenes en una página web son casi necesarias, pero su correcta optimización lo son aún mas. Una imagen que ocupe mucho puede repercutir negativamente en la carga de nuestro sitio web, por eso optimizarlas y reducirlas al tamaño deseado mejorará sensiblemente la velocidad de carga.Redimensionar
Redimensiona de forma "escalada" la imagen indicando el Width o Height deseado. De esta forma podemos redimensionar la imágen y no hacer que wordpress o el navegador hagan el trabajo. ResizerOptimizar
Optimiza la Imagen minimizando el número de colores a utilizar en la imagen. Por regla general, para las páginas web con tan sólo 256 colores podemos obtener casi los mismos resultados que con las imagenes que tiene "Miles de Colores". Incluso con 64 colores podemos ver prácticamente los mismos resultados reduciendo el peso de las imagenes. Optimizer Haced la pruebas y lo comprenderéis.Recomendación
Siempre que incluyamos una imágen en nuestra página es muy recomendable indicar el "width" y "height" de la imágen en la propia etiqueta. Por ejemplo
Al hacer escribir esto, evitamos que el Navegador tenga que calcular el Alto y Ancho de la imagen evitando gastae tiempo de procesado con este objetivo. Esta información la tenemos, así que es sólo cuestión de tener ganas ¿Tenéis ganas Normalmente?....<IMG src="images/name.png" width="200px" height="200px" /> - Menus Dinamicos en Vertical con CSS y Javascript
Menus Dinamicos en Vertical con CSS y Javascript
Pasos para saber como crear Menus Dinámicos en Vertical para los Proyectos Web. Sin pensarlo demasiado creía que sólo con CSS ya se podía hacer los menus en verticales. Cierto, pero no Menus tipo DropDown List, Menu tipo Lista Desplegable que se muestre u oculte en función del movimiento del ratón. Por lo que Necesitas Javascript, y después de buscar un poco de información encontré un artículo que Recopila Ejemplos de Menus Desplegables Navegables Multinivel (Ejemplos y Tutoriales de Drop Down Navigation Menus). Algunos utilizan código javascript personalizado y otros librerías tipo JQuery, Prototype, Mootools. Pero las funcionalidades básicas se pueden encontrar en el primer ejemplo de dynamicdrive, sencillo, funcional y encima nos podemos descargar el código fuente de ejemplo. También hemos encontrado un Plugin de Wordpress para generar Menus Navegables Multilevel Navigation Plugin (No lo he probado) Recomiendo utilizar primero un Ejemplo Sencillo que podamos modificar e intentar adaptarlo a nuestras necesidades, y después ya nos iremos complicando la vida. Pensad que es posible que a más complicación, más tiempo de carga. ¿Existe alguna forma de Crear Menus Dinámicos en Vertical sin usar Javascript?... - En Mi Ordenador Funciona
En Mi Ordenador Funciona
Quizás, una de las frases Más Escuchadas/Dichas en la Vida de un Programador. Solución: Algo hay diferente entre tu Ordenador y el Mío.... - Como Saber la Version del SQLServer y su Service Pack
Como Saber la Version del SQLServer y su Service Pack
Consulta SQL para obtener version SQL Server y su SP (Service Pack). Cuando las personas de Sistemas y de Desarrollo no son las mismas, es interesante saber que versión exacta de SQL Server tenemos instalada, porque podemos encontrarnos con el típico comentario "En mi Ordenador Funciona".Consultas para Obtener Version SQL Server
SELECT LTRIM(RIGHT(LEFT(@@VERSION,38),9))
SELECT 'SQL Server ' + CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - ' + CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' (' + CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'
Desde el Registro
HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ MSSQLServer\ HotFixes\
Más información en sqlserver2000.databases.aspfaq y en support.microsoft... - Como Saber la Version del IIS instalada
Como Saber la Version del IIS instalada
Para saber la versión del Internet Information Services instalada, lo común es ir a "Ayuda" - "Acerca de...", pero en algunas versiones es más difícil encontrarlo.Como Ver la Version del IIS (Internet Information Service)
Existen diferentes formas para saber la versión del IIS instalada Abrir el navegador y poner "http://localhost/iishelp", aparece la ayuda del IIS con la versión Ir al registro para saber la versión instalada "HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Services\ W3SVC\ Parameters\ MajorVersion" También se comenta que desde "Programas - Accesorios - Herramientas del Sistema - Información del Sistema", dentro de Servicios el llamador "Servición de Publicación World Wide Web" con nombre "W3SVC". En mi caso no me ha servido Vía ForoselWebVersión IIS Desde Páginas ASP
También podemos saberlo por código (vía babelias)<%=System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Environment.SystemDirectory + "\\inetsrv\\inetinfo.exe")%>
Mostrando una información tipo
...File: C:\WINDOWS\system32\inetsrv\inetinfo.exe InternalName: INETINFO.EXE OriginalFilename: INETINFO.EXE FileVersion: 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158) FileDescription: Internet Information Services Product: Internet Information Services ProductVersion: 5.1.2600.2180 Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: English (United States)
- Eliminar Acentos con .Net Utilizando Expresiones Regulares
Eliminar Acentos con .Net Utilizando Expresiones Regulares
Como eliminar acentos de los strings con RegEx (Expresiones Regulares). Lo primero que se nos ocurre es realizar un "Replace" del String para modificar todos aquellos carácteres específicos. Por ejemplo como subgurim.net nos expone, un código sencillo y fácil utilizando un simple "Replace", Pero ¿no sería mejor utilizar una Expresión Regular?. ADeshoras nos proporciona dos métodos Eficientes para quitar acentos, de los que podemos incluso descargar el código y ver como funciona. Utilizando RegEx (System.Text.RegularExpressions) Utilizando Normalización Unicode (System.Text.Encoding) De las dos opciones he utilizado la primera, por sencillez y claridad, además de que donde pensaba utilizarla era un proceso de Importación que se ejecutará una sola vez.
El Método funciona correctamente, utilizando Expresiones Regulares hemos podido eliminar los acentos de las vocales que en ocasiones no tienen ningún sentido. Además tenemos la versión de javascript para quitar acentos con Expresiones Regulares, tal como explican en proinf.net en el artículo Generar Permalinks directamente desde Javascript, donde tuvieron que eliminar los acentos....public static string RemoveAccentsWithRegEx(string inputString) { Regex replace_a_Accents = new Regex("[á|à|ä|â]", RegexOptions.Compiled); Regex replace_e_Accents = new Regex("[é|è|ë|ê]", RegexOptions.Compiled); Regex replace_i_Accents = new Regex("[í|ì|ï|î]", RegexOptions.Compiled); Regex replace_o_Accents = new Regex("[ó|ò|ö|ô]", RegexOptions.Compiled); Regex replace_u_Accents = new Regex("[ú|ù|ü|û]", RegexOptions.Compiled); inputString = replace_a_Accents.Replace(inputString, "a"); inputString = replace_e_Accents.Replace(inputString, "e"); inputString = replace_i_Accents.Replace(inputString, "i"); inputString = replace_o_Accents.Replace(inputString, "o"); inputString = replace_u_Accents.Replace(inputString, "u"); return inputString; } - Se Profesional, haz TDD
Se Profesional, haz TDD
Be Professional, do TDD. "Let us see the hands of people who are practising Test Driven Development?"... weblog.madebymonsieur.com. TDD es Desarrollo Guiado por Pruebas, lo que quiere decir es que primero tenemos que definir las pruebas que queremos hacer.... - Conviertete en un Hacker con una Extension de Firefox para obtener cuentas de Facebook y Twitter
Conviertete en un Hacker con una Extension de Firefox para obtener cuentas de Facebook y Twitter
Un Plugin de Firefox consigue obtener las cuentas privadas de los usuarios de Facebook, twitter, Google, Windows Live, Flickr, Yahoo,... teniendo la capacidad de ampliarse y agregar más a la lista.Funcionamiento
Lo que hace es rastrear las redes Wifi abiertas, investiga las cookies y obtiene los datos del usuario de varias páginas importantes. Después solo tenemos que clickar donde queremos entrar.When logging into a website you usually start by submitting your username and password. The server then checks to see if an account matching this information exists and if so, replies back to you with a "cookie" which is used by your browser for all subsequent requests.
t's extremely common for websites to protect your password by encrypting the initial login, but surprisingly uncommon for websites to encrypt everything else. This leaves the cookie (and the user) vulnerable. HTTP session hijacking (sometimes called "sidejacking") is when an attacker gets a hold of a user's cookie, allowing them to do anything the user can do on a particular website. On an open wireless network, cookies are basically shouted through the air, making these attacks extremely easy
Motivación
La motivación del desarrollador, Eric Butler, al parecer es para que se mejoren los datos de privacidad y seguridad, e intenta dar un aviso a todas las páginas, importantes y muy utilizadas por los usuarios, para que traten mejor la privacidad de los usuarios. La técnica utiliza fue la misma que utilizaron los coches de Google Street View, "Por Error", de donde obtuvieron millones de datos e información privada, de redes Wifi Abiertas.This is a widely known problem that has been talked about to death, yet very popular websites continue to fail at protecting their users. The only effective fix for this problem is full end-to-end encryption, known on the web as HTTPS or SSL. Facebook is constantly rolling out new "privacy" features in an endless attempt to quell the screams of unhappy users, but what's the point when someone can just take over an account entirely? Twitter forced all third party developers to use OAuth then immediately released (and promoted) a new version of their insecure website. When it comes to user privacy, SSL is the elephant in the room.
Descargar FireSheep
La extensión se llama FireSheep, y de momento se puede descargar desde los AddOns de Firefox o desde la página de codeButler.Firesheep Al Día Siguiente
Eric Comenta que nunca hubiera pensado la repercusión que iba a tener el plugin, y mucho menos que apareciera entre las 10 primeras búsquedas en Estados Unidos.I went back and forth trying to predict what the reaction might be. Initially before Firesheep was completed I thought there might be moderate interest, but then after doing more research found a lot of one-off articles discussing this same issue that were essentially ignored. I certainly never expected Firesheep to be the #10 trending search on Google in the US.
Conclusión
Evidentemente tiene una repercusión muy grande, y es un Tono de Advertencia para las empresas que posen el registro de millones de usuarios, para que se preocupen más de la seguridad y no tanto de la publicidad. via Viruslist... - Como crear un Planeta de Blogs
Como crear un Planeta de Blogs
Crear un Planeta de Blogs Planet-Blog es una página que obtiene la información a través de otros blogs. Es contenido Duplicado evidentemente, pero para recopilar noticias puede ser una muy buena idea. Siempre me he preguntado como crear un Planeta de Blogs, así que me puse a buscar. Tomando como base el artículo Como crear Planeta de Blogs de dreig, vi que se podían reunir noticias de diferentes blogs de forma online. También me había preguntado como incorporar esta funcionalidad a un blog Wordpress, y este artículo también me lo respondió.Que Necesitamos
Antes de instalar los plugins para obtener la sindicación, tenemos que saber como vamos a obtener los Feeds. ¿De forma manual? o ¿queremos programar una tarea en el servidor que se dedique a obtener artículos automáticamente?. Para programar una tarea automática necesitamos tener permiso en el servidor para poder configurar tareas programadas, por ejemplo Cron-Jobs (Unix).Los Plugins
Os ofrezco dos opciones: FeedWordpress Wp-0-Matic De las dos opciones, que he instalado en Local para ver las opciones que me ofrece cada uno, prefiero el FeedWordpress, aunque el Wp-o-Matic tiene una opción muy buena de Reescribir palabras clave por otras (incluso links). Con FeedWordpress puedes utilizar custom fields posts, que será algo parecido.... - Como se infecta un Smartphone
Como se infecta un Smartphone
Virus y troyanos en los Smartphones. ¿Como proteger nuestros smartphones del software malintencionado?, pues de momento siendo prudentes. Hay que pensar de base, que actualmente los smartphones son miniordenadores (tengo un Pentium 700MHz más lento que el Nexus One), por lo que pueden infectarse de la misma manera.Como se infecta un Smartphone
En mi opinión y sin realizar ningún estudio, diría que el 99% de los virus para los móviles se instalan por aplicaciones falsas. Los primeros Troyanos que aparecieron para Android eran aplicaciones "porno" que el propio usuario tenía que instalar, dándoles permisos para enviar SMS. Por eso comento que hay que ser prudentes y revisar que instalamos. En Lugar de ir al Market e instalar toda aplicación viviente, instalar solamente lo que realmente podemos llegar a necesitar. Y Siempre revisar los permisos que necesita. De momento no se conoce ningún Juego que necesite enviar SMS. Tampoco creo que a través de un SMS se pueda infectar un Smartphone, a no ser que instales el contenido del mensaje. También es muy posible que en un futuro también te infectes navegando como en un ordenador cualquiera, pero es más complicado por el tipo de sistema operativo.Android, iOS o Windows Phone
iPhone OS esta basado en Mac y Android esta basado en Linux. Ambos son sistemas operativos relativamente jóvenes (2007/2008) y no tan difundidos como lo podría estar un Windows XP (2001). No es que sean más o menos seguros, sino que todo reside en el número de personas que lo utilizan. Evidentemente es mejor dedicar esfuerzos para desarrollar virus en Windows porque infectaras a más personas. Particularmente creo que será más fácil que se infecte un Android que un iPhone OS, por el simple echo de que deriva de código libre. No porque sea peor (no quiero expresarme mal), sino porque será más fácil encontrar las vulnerabilidades cuando tienes el código delante que cuando no lo tienes. En un futuro veremos las particularidades del Windows Phone, pero Windows también nos tiene acostumbrados a los virus y actualizaciones de seguridad, así que no creo que ningún sistema operativo pueda librarse de los virus.Flash y Java
El Flash es una de las puertas que suelen utilizarse para infectar un ordenador. Java también es otra puerta que cada vez utilizan más para instalar software malintencionado. Por eso, aunque el Smartphone lo permite, de momento no pienso instalar el Flash, ya que de momento no me aporta nada y si creo que por el Flash pueda infectarse el Smartphone.Conclusión
No instalar todas las aplicaciones que aparecen en el Market. Revisar los permisos que damos cuando instalamos alguna aplicación Prudencia y desconfiar... - Pruebas de Concepto y Pruebas de Viabilidad
Pruebas de Concepto y Pruebas de Viabilidad
Las Pruebas de Concepto ayudan al Análisis de Viabilidad. En proyectos informáticos decimos en alguna ocasion Pruebas de Viabilidad, en mi opinión mal dicho, ya que son Pruebas de Concepto. Demostrar que lo que se quiere desarrollar es posible dentro de las posibilidades disponibles actuales. Las Pruebas de Concepto nos ayudaran para saber si un proyecto nuevo es Viable, son pruebas cortas e incompletas para verificar la viabilidad del proyecto. Mas información relacionada con Las Pruebas de Concepto En Cambio el Estudio o Análisis de Viabilidad, define si un proyecto puede desarrollarse con éxito. Dentro de un marco económico, político - legal y dirigido a un mercado. Es posible que un proyecto pueda desarrollarse, pero por ejemplo si producirá más costes que beneficios, se suele decir que no es viable.... - Cargar Javascript OnAfterLoad, después de cargar la página
Cargar Javascript OnAfterLoad, después de cargar la página
Cargar javascript de terceros después de que la página se cargada y así ganar velocidad de carga. Existen diferentes opciones, pero vamos a redirigir al artículo de tutkiun.
Es la solución que empleó Google para Google Analýtics, modificando el código para que se cargara Asíncronamente. Además de esta solución podemos encontrar otras alternativas para cargar javascript asíncronamente entre las que se encuentra una de las mejores maneras para cargar Adsense más rápido, ya que de momento no es posible cargarlo de manera asíncrona....element1.async=true; - MySQL Workbench como Front End de MySQL
MySQL Workbench como Front End de MySQL
Cansado de utilizar el PhpMyAdmin para acceder a las bases de datos, me puse a buscar una aplicación MySQL Front End. Hace tiempo cuando trabajaba con esta base de datos utilizaba un par de programas para ello, pero desde que dejé de utilizarlo en el trabajo, les perdí la vista. Sabía que MySQL poseía un MySQL Browser, completo y con ayuda. Por eso lo primero que hicé fue conectarme a la página oficial para ver que tenía (y si podía descargarlo sin registros ni licencias varias). Encontré el MySql Work Bench que permite:Database Design & Modeling SQL Development (replacing MySQL Query Browser) Database Administration (replacing MySQL Administrator)
Download MySQL WorkBench
¿Conocéis algún Programa más para Trabajar con MySQL sin necesidad de utilizar PhpMyAdmin?... - Peticiones Simultaneas HTTP para leer Feeds, por ejemplo
Peticiones Simultaneas HTTP para leer Feeds, por ejemplo
Como realizar Peticiones Simultáneas HTTP desde PHP. Hace ya algún tiempo siguiendo la suscripción de Javier Casares, nos expuso como realizar peticiones simultaneas desde Php. Al leerlo vi una posible salida a una idea que tenía, así que como posible código a utilizar me lo apunté. La idea es sencilla. Imaginemos que queremos realizar 4 peticiones para leer información, pues en lugar de lanzar las peticiones de forma secuencial, obteniendo como resultado la suma de las 4 conexiones. La idea es realizar las llamadas tipo "thread", asíncrono o en paralelo, (aunque no sea realmente cierto), obteniendo como resultado poco más del tiempo de la petición más lenta. Toda la información la tenéis en el artículo que escribió el mismo Javier en Peticiones simultaneas desde php, y yo me la apunto y la comparto con vosotros.... - Agregar Atributos para acceder desde Javascript
Agregar Atributos para acceder desde Javascript
Agregar atributos a los controles para utilizarlos desde Javascript. Javascript es un lenguaje muy flexible, en ocasiones limitado por seguridad ya que se ejecuta en el ordenador del cliente, pero a su vez es muy flexible. La idea es poder agregar a todos los controles que componen una página web (labels, textbox, inputs, ...) un atributo personalizado. El Ejemplo que veremos a continuación esta orientado a las páginas Web Asp.Net.Primero Crear el Atributo Customizable
Lo más normal sería llamarlo desde el Evento Page_Load, pero sólo cuando "!IsPostBack", de esta forma no resetearemos el valor cada vez que recarguemos la página. Y este atributo nos puede servir para guardar alguna información personalizada.protected void AgregarAtributoMyId(ControlCollection controls) { foreach (Control ctrl in controls) { if (ctrl is WebControl) ((WebControl)ctrl).Attributes.Add("myId", ctrl.ID); } }Recuperar el Valor del Atributo desde Javascript
Ahora necesitamos obtener el valor, y para eso necesitamos saber el ClientID del Control en Cuestión.var ctrl = document.getElementById(txtControlClientID); aux = ctrl.attributes.item('myId').value+'='+ctrl.value;Conclusión
Realmente no se las posibilidades que tiene, vamos a ser sinceros. Pero cuando lo descubrí lo vi interesante y por eso me lo apunte para escribirlo y así tenerlo presente en el momento que me haga falta. Si llega el Día. Una manera de Almacenar Valores en Atributos Personalizables y Recuperarlos desde Javascript.... - Librerias para gestionar Ficheros TAR en .NET
Librerias para gestionar Ficheros TAR en .NET
Librerías y Herramientas para trabajar con ficheros TAR, ZIP, GZIP con .Net. Es cierto que el Framework de .net nos ofrece el Namespace
Las clases GZipStream y DeflateStream, para poder trabajar con ficheros comprimidos, pero el caso del Tar es un poco diferente, y puede ser algo complicado gestionarlos sólo con estas clases.System.IO.CompressionLibrerías
Existen varias librerías para trabajar con este tipo de ficheros, pero os voy a proponer dos ICSharpCode, una librería que en mi opinión utiliza la gran mayoría de gente. Además de ser Gratuita, puedes descargarte el código y modificarlo si fuera necesario. Tar-cs, Librería de google para trabajar con ficheros Tar. De las dos opciones y después de probarlas, me quedo con la primera, ya que la segunda tiene un pequeño problema que comentaré después.Herramientas para Generar ficheros Tar
El más fácil de utilizar es el famoso programa 7Zip, que te permite generar ficheros Tar sin ningún problema. También podemos usar el GnuWin32 en línea de comandos para trabajar con los ficheros, pero es un poco más incómodo.Conclusión
El problema con la librería Tar-cs que comentaba antes, es que da error con los ficheros generados a partir del 7zip, no así con los generados con el GnuWin32. Por eso recomiendo el uso de la librería SharpZipLib de ICSharpCode, por su facilidad y la gran cantidad de ayuda que podrás encontrar.... - Alternativa al Adsense Asincrono, para mejorar la velocidad
Alternativa al Adsense Asincrono, para mejorar la velocidad
Como cargar Adsense Asíncrono no es posible, por mucho que lo intentes y consigas cargar el Script Adsense asíncronamente, no te funcionará. Una de las especifícaciones que veo en Google Support es que no se permite la carga asícrona del Adsense.Very Best method for Load Adsense
Una de las mejoras para cargar Adsense más rápido, aunque sea para la percepción del usuario, es Situar todos los Scripts al final de la página (footer.php) siguiendo las indicaciones de semplicewebsites. Las bases son situar el código de Adsense en la parte inferior de la página, después mediante el método .onload de la página, situar el código adsense dentro del bloque DIV que nos interesa. Algo parecido al siguiente código.
Lo que no entiendo es porque Google ya nos optimiza el código de Analytics para que se cargue asíncronamente y el de Adsense todavía no, espero que en breve tengamos noticias al respecto<html> ... <body> <!-- ... Header, Menu, Content, --> <!-- Article --> <div id="ad1_inline"></div> <!-- Article End --> <!-- ... Footer --> <!-- Adsense Code Abajo del Todo --> <div id="ad1_footer" style="display: none;"> <script type="text/javascript"><!-- <em>Google ad params</em> //--></script> <script type="text/javascript" src="...show_ads.js"></script> </div> <script type="text/javascript"> window.onload = function() { document.getElementById('ad1_inline').appendChild(document.getElementById('ad1_footer')); document.getElementById('ad1_footer').style.display = ''; } </script> </body> </html>Cargar Asíncronamente Javascript
Para mejorar aún más el código de optimización de carga de nuestros javascript, ya sean internos o externos, podemos seguir las pautas de anieto2k. Fichero javascript lo más reducido posible La idea es utilizar un fichero .js que contenga una función de carga asíncrona de ficheros javascript, y otro fichero javascript con el resto de nuestro código. Creamos un fichero llamado min.js, el cual contendrá el método loadScript. Recibirá la url donde se encuentre el fichero javascript que queremos cargar asíncronamente, y un método de Callback, el cual nos servirá de inicialización si fuera necesario.
Para utilizarlo seríafunction loadScript(url, callback){ var script = document.createElement("script") script.type = "text/javascript"; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function(){ callback(); }; } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); }
Si aplicamos esta técnica con el código de Adsense, no nos funcionará (ya lo he intentado y no aparece ningún anuncio). Pero si es cierto que si juntamos las dos optimizaciones minimizaremos el impacto de carga que tenga el Javascript en nuestra página web....<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/min.js"></script> <script type="text/javascript"> loadScript("<?php bloginfo('template_url'); ?>/js/utils.js", function(){ }); </script> - Auto Eventos del PostBack en Paginas aspx
Auto Eventos del PostBack en Paginas aspx
Configurar que la página o controles específicos realicen un PostBack automático, es decir, cuando queremos relacionar que los eventos de la página o de los controles produzca una devolución de datos desde el Servidor. Por eso, ado que el entorno de Microsoft te ofrece una gran facilidad para programar páginas web, es normal que casi sin darnos cuenta, nos encontramos con que la página ya pose una propiedad llamada AutoEventWireup, lo que hace es definir si queremos que los eventos de la página se gestionen automáticamente desde el Servidor o no. Pero más profundamente, podemos configurar la propiedad AutoPostBack en controles como un CheckBox o un TextBox, de esta manera podemos hacer que los eventos típicos de estos controles se ejectuten en el servidor. Aunque hay que reflexionar si realmente lo necesitamos o si es debido a que de esta manera es más fácil para desarrollar. Tenemos que preguntarnos ¿Puedo hacerlo con Javascript? Esta propiedad nos viene bien, por ejemplo, cuando tenemos un GridView con CheckBoxes, es probable que cuando configuremos el evento Click o CheckChanged del CheckBox no pase nada, para eso tenemos que configurar la propiedad AutoPostBack=True para solucionar el problema. Vía GeeksWithBlogs Más información en Propiedad AutoEventWireUp de la Página y los AutoPostBack de un TextBox o un CheckBox.... - Usos con LDAP del Active Directory desde .NET
Usos con LDAP del Active Directory desde .NET
Utilizar el protocolo LDAP para interactuar con el Active Directory del Servidor. Una de las herramientas más utilizadas para el control de usuarios es utilizar el Active Directory, por lo que Acceder, Crear o Importar datos puede ser una tarea común entre los desarrolladores. Para más información ver las Referencias al final del Artículo. Dado que el artículo es bastante extenso, sólo aquellos usuarios interesados lo visualizaran al completo.Introducción
El Artículo da las herramientas para que un usuario con conocimientos pueda crear funciones para: Autenticar (o Autentificar) usuarios contra el Active Directory Configurar la constraseña desde Código Habilitar una cuenta de Usuario Crear un usuario desde .Net Agregar un usuario a un grupo específico Lista de referencias donde podremos encontrar la información que este artículo no ofrece. Si te interesa el artículo... - Como aplicar estilos CSS o Themes a paginas o Skins a controles en asp.net
Como aplicar estilos CSS o Themes a paginas o Skins a controles en asp.net
Aplicar estilos "Themes" al proyecto, páginas y controles individualmente en ASP.Net. En ocasiones nos encontramos con que las cosas más sencillas son a las que no les prestamos atención. El entorno de Microsoft te incluye varias líneas de código a tus proyectos web, y si tenemos bien definidos los estilos también te incluye el código necesario para incluir el CSS. Los Temas de Estilos en un proyecto web ASP.NET se situan en una carpeta llamada "App_Themes", y dentro creamos todos los temas que queramos. La estructura del proyecto asp.net será parecido a ...Configurar el Proyecto Entero
Para configurar que theme queremos utilizar, sólo tenemos que modificar el web.config del proyecto web.
Si el Theme que creamos se llama "Default", no hace falta que incluyamos el código necesario porque aplica ese Theme por defecto<configuration> <system.web> <pages theme="ThemeName" /> </system.web> </configuration>Aplicar un estilo concreto a una Página
Para aplicar estilos concretos a una página determinada, tenemos que utilizar las siguientes directivas en el fichero .aspx
Si queremos saber más sobre las directivas de las páginas .aspx, tenemos más información en la MSDN Page Attibutes.<%@ Page Theme="ThemeName" %> <%@ Page StyleSheetTheme="ThemeName" %>Aplicar estilo a un WebControl
Podemos aplicar estilos específicos a nuestros WebControls utilizando Skins. Cuando utilizamos los controles asp, podemos configurarlos y aplicarles estilos personalizados y definir la funcionalidad que deseamos. Esta tarea probablemente la repitamos para que todos los controles del mismo tipo tengan el mismo aspecto y configuración. Los Skins lo que hacen es definir una configuración, estilo y comportamiento para un tipo de control, el cual podemos aplicarlo en donde queramos. Los Skins forman parte del Theme, por lo que se aplican directamente por defecto. Dentro del theme "botón Derecho" - "Add New Item" - "Skin File". Creamos el Skin y definimos el estilo de los controles que vamos a utilizar. Por Ejemplo (dentro del fichero .skin)
Y en la página que aplique este Theme, todos los botones tendrán un aspecto como este Pero si lo que queremos es personalizar un Control, tenemos que identificar el estilo del Control con el SkinID<asp:button runat="server" BackColor="lightblue" BorderColor="AliceBlue" Font-Bold ="true" ForeColor="black"/>
y para utilizarlo definimos que tipo de Skin queremos<asp:button runat="server" SkinID="mySkin" BackColor="Brown" BorderColor="AntiqueWhite" Font-Bold ="true" ForeColor="black"/><asp:Button ID="btnMySkinButton" runat="server" SkinID="mySkin" />Referencias
La base del artículo esta en Como Aplicar Themes de la MSDN.... - Como conseguir busquedas voy a tener suerte en Wordpress
Como conseguir busquedas voy a tener suerte en Wordpress
Búsquedas en un Blog Wordpress personalizas con voy a tener suerte. El Objetivo es que si el resultado es de un sólo artículo, redirija directamente al único artículo encontrado, Pero si el resultado es de más de un artículo nos muestre todo el listado. Es similar a la técnica "I'm Feeling" o "Voy a Tener Suerte" de Google, pero un poco más ajustado a nuestras necesidades. Para conseguirlo no es necesario ningún plugin, ya que el cambio a realizar en nuestro Theme de Wordpress es muy sencillo.Pasos a Seguir
Hacer una copia del archivo llamado "header.php" Modificar el fichero y poner arriba del todo el siguiente código
Este código hace lo siguiente: Si es un resultado de búsqueda y tiene artículos, y sólo tiene 1 artículo, entonces recuperamos el artículo y redirigimos al mismo. Probar si funciona, sino resturar la copia del Header.php Si por casualidad queremos que se comporte siempre como el Voy a Tener suerte de Google, y redirija siempre al primer artículo, independientemente de si el resultado es de 1 o más artículos. Tenemos que eliminar la línea de código<?php if ((is_search()) && (have_posts())) { if (count($posts)==1) { the_post(); $mypermalink = get_permalink(get_the_ID()); header( "Location: $mypermalink"); } } ?>
Esperamos ser de ayuda....if (count($posts)==1) - Llamadas al servidor desde el cliente con DoCallBack y DoPostBack ASP.NET
Llamadas al servidor desde el cliente con DoCallBack y DoPostBack ASP.NET
Microsoft incluye por defecto librerías Javascript para poder realizar DoPostBack y DoCallback. Llamadas a métodos del Servidor desde el lado Cliente. Esta posibilidad es interesante, y en ocasiones es realmente útil, aunque hay que tener bien controlado el repintado de pantalla sino queremos volvernos locos. Por definición el DoPostBack es síncrono y el CallBack es asíncrono, aunque es configurable. De ambas manera podemos llamar a métodos de la parte Servidor desde Javascript.Ejemplo DoCallBack
DoCallBack utiliza la tecnología Ajax para llamar al Servidor y retorna el flujo del proceso a un método CallBack de Javascript. Para conseguirlo debemos implementar la Interface ICallbackEventHandler
Código necesario de la Interfazpublic partial class mipage : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
El código que realiza la llamada doCallBack desde Javascript es#region ICallbackEventHandler private string respuestaCallBack = string.Empty; void ICallbackEventHandler.RaiseCallbackEvent(string eventArg) { respuestaCallBack = "Es posible "+eventArg; } String ICallbackEventHandler.GetCallbackResult() { return respuestaCallBack; } #endregion
Aunque podemos utilizar el método Page.ClientScript.GetCallbackEventReference(this,...) para generar el código javascript y almacenarlo en alguna variable o atributo de nuestra página. Nosotros nos guardamos en una variable el Control que implementa la Interfaz para llamarlo desde Javascript, aunque se puede hacer más directo.WebForm_DoCallback(controlImplementInterfaz,datosenvio,funcionJScallback,idllamada,funcionJSerror, esAsincrono);
Ejemplo del Código Javascript//Llamamos al siguiente método desde el PageLoad protected void RegisterScriptVariables() { System.Text.StringBuilder sbJS = new System.Text.StringBuilder(); sbJS.Append("var controlImplementInterfaz = '" + this.UniqueID + "';"); // registrar en la página el código JavaScript Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"ScriptVariablesJS", sbJS.ToString(), true); }function CallServer() { WebForm_DoCallback(controlImplementInterfaz, datosenvio, CallServerCallBack, null, null, false); } function CallServerCallBack(result, idLlamada) { alert(result); }Referencias de Ayuda Callbacks
oscarsotorrio.com, ejemplo 1 en castellano. dotnetslackers.com, ejemplo 2 en ingles. edndoc.esri.com, ejemplo 3 en ingles. Los tres ejemplos son complementarios entre sí.Ejemplo DoPostBack
Últimamente el DoPostBack se genera automáticamente por regla general al pulsar cualquier botón o evento en la página, donde el control tenga puesto el "runat=server". Pero podemos utilizar un truco con esta tecnología para llamar a métodos concretos. Aunque no es muy recomendable porque existen otras opciones que con un poco más de tiempo les sacaremos más rentabilidad y a la larga nos vendrá mejor. Los parámetros son: eventTarget: Control que provocará el evento eventArgument: Los parámetros que se desean mandar Para controlar los eventos de las páginas, Microsoft añade dos cajas de texto por cada página ASP.NET que tengamos.
Después cuando realizamos el envío del formulario al servidor, utiliza estos campos para enviar la información del objeto y los parámetros.<input type="hidden" name="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" value="" />
Sabiendo esto podemos generar un código en momentos de "crisis" para llamar al método que queramos.function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } }
Referencia en ForosDelWeb....//Javascript function CallServerMethod() { __doPostBack('OpcionA',''); } //Código Servidor protected void Page_Load(object sender, EventArgs e) { if (Request.Params["__EVENTTARGET"] == "OpcionA") ServerMethod(); else //ServerMethodWithParameters(Request.Params["__EVENTARGUMENT"]); if (!Page.IsPostBack) { //... } } protected void ServerMethod() { //Ponemos el código que necesitamos en el lado Servidor } - Las Claves del ModalPopupExtender ASP.NET
Las Claves del ModalPopupExtender ASP.NET
Cosas a tener en cuenta cuando creamos un Modal Popup Extender de las librerias Ajax Control Kit. En ocasiones nos decidimos a mostrar información tipo "PopUp" pero sin que sea directamente un PopUp. El Control ModalPopupExtender nos ayudará para mostrar información tipo PopUp y desactivar el resto de la pantalla. (Que los usuarios tiene el ratón muy suelto).
Este Código hay que completarlo con código Javascript para terminar de cuadrar nuestro Panel Modal.<asp:Button ID="btnModal" runat="server" Text="Consultar 1" CausesValidation="False" OnClientClick="javascript:showmpe();"/> <ajaxToolkit:ModalPopupExtender runat="server" ID="mpeSelec" BehaviorID="mpeSelec" TargetControlID="btnModal" PopupControlID="pnlModal" BackgroundCssClass="modalBackground" OkControlID="btnAceptarModal" OnOkScript="Aceptar()" CancelControlID="btnCancelarModal" OnCancelScript="Cancelar()"> </ajaxToolkit:ModalPopupExtender> <asp:Panel ID="pnlModal" runat="server" style="margin:auto; text-align:center;" Width="400px" class="panel1" BackColor="white" Height="400px"> <!--Aqui el Código que queremos tipo PopUp--> <asp:Panel ID="pnlInfo" runat="server" ScrollBars="Vertical" Height="80%"> <!--Más Código--> </asp:Panel> <div style="text-align: center; margin:auto;"> <asp:Button id="btnAceptarModal" runat="server" Text="Aceptar" CssClass="boton" CausesValidation="False" ></asp:Button> <asp:Button id="btnCancelarModal" runat="server" Text="Cancelar" CssClass="boton" CausesValidation="False" ></asp:Button> </div> </asp:Panel> </asp:Panel>
Este Ejemplo consta de: Un Botón para provocar el evento y mostrar el Panel tipo Modal. La configuración del Control ModalPopupExtender Un Panel que utilizaremos para mostrar la información tipo PopUp en modo Modal Código Javascript para establecer el comportamiento y pasar informaciónfunction showmpe() { var modal=$find('mpeSelec'); if (modal!=null) { modal.show(); } } function Aceptar() { alert('Ok'); } function Cancelar() { alert('Cancel'); }A tener en Cuenta
El ModalPopupExtender se cerrará siempre y cuando se produzca un PostBack. Esta restricción es la clave para controlar correctamente la información que mostramos, ya que si no veremos una especie de parpadeo, o que el PopUp se abre y se cierra sin ningún tipo de control.Posibles Problemas
Aparece y desaparece: escribir style="display:none;" en el Control que identifica la propiedad "PopupControlID" del ModalPopupExtender. Como Recuperar información del Servidor cuando estamos en el lado Cliente. Existen algunas técnicas para realizar llamadas al Servidor sin provocar un PostBack. Webservices, Ajax o utilizando CallBacks, todo requiere de un esfuerzo, así que primero valorar si realmente hace falta. (más adelante explicaremos los "dopostback" y los "docallbacks")Referencias y ayudas
asp.net Ayuda de Referencia sobre las opciones disponibles geeks, excelente ejemplo de como montar el ModalPopupExtender. elrincon de aspnet y ajax ejemplo que incluye el uso de un WebServices.... - Comenzando el desarrollo de aplicaciones Android
Comenzando el desarrollo de aplicaciones Android
Herramientas y enlaces para principiantes en el Desarrollo de aplicaciones Android como yo. Android pose una SDK (Software Development Kit) que puedes utilizar para realizar tus aplicaciones para éste sistema operativo. Para Eclipse tiene un plugin que se ajusta al entorno de desarrollo. Aunque se puede instalar el SDK en Netbeans o en otros IDE Java, lo recomendado es el Eclipse Java EE, y de momento no la última versión 3.6, sino la 3.5 Galileo o 3.4 Ganimede.Empezamos por el Entorno
Lo primero es preparar el entorno, y para conseguirlo tenemos que descargar el Eclipse y la SDK Android. Download Eclipse, nuestra opción ha sido Eclipse For Php 3.5 Galileo,aunque no recomiendan esta versión vamos a ver si funciona. Download SDK Android Una vez descargado, descomprimimos los ficheros en la ruta que queramos.Seguimos con la Instalación
Una Vez tenemos el Eclipse y la SDK descargados, tenemos que instalar la SDK, ya que el paquete que te descargas es el básico, básico y con alguna que otra herramienta. Pero antes que nada recomiendan poner la carpeta Tools en el Path de las Variables de Entorno. Lo segundo es seguir la guía para Instalar SDK que te ofrece Google, pero resumiendo es Ejecutar el SDK Setup.exe e instalar el resto de la SDK. Instalar el Plugin ADT para Eclipse, el cual dependiendo de si es la versión 3.4 o 3.5 varia sensiblemente. Una vez instalado configurar las Preferencias del Plugin en el Eclipse tal como te indican.Listos para el Hola Mundo o Hello World
Google recomienda comenzar con el proyecto Hello World, que te explicará como crear un proyecto Android, seleccionar la versión de la API a utilizar y lo necesario para comenzar como principiante. Para que la Aplicación funcione, tenemos que crear un AVD Android Virtual Device que podemos hacer desde el propio "SDK Setup.exe". Un AVD es un emulador de Android, configurado para una versión específica, y es donde ejecutaremos nuestros proyectos. Hasta el momento es todo lo que podemos explicar de Android. Para continuar tenemos apuntado el Capitulo 1 Hello World, realizado por MaestrosDelWeb con la opción de ir a un Segundo Capítulo con Acceso a Base de Datos para crear tu propias "Notas". Estos manuales esta muy explicados, y seguro que nos ayudara a entender mejor la arquitectura de esta nueva tecnología.Finalizar con Tener la Documentación Lista
Google ofrece un a gran cantidad de información, buenas prácticas y recomendaciones. Incluso hasta define el tipo de iconos que deberían usarse y que pasos seguir para crear una buena aplicación. Por eso nunca viene de más tener: Dev Guide, Guía de Desarrollo Android API Reference, la referencia a la API de Android para búsquedas más concretas.... - Buenas practicas Javascript y Php
Buenas practicas Javascript y Php
Recomendaciones de desarrollo en buenas prácticas de Javascript y Php. Hace ya algún tiempo escribí unas Buenas Prácticas en Php para Principiantes (como yo), ya que el lenguaje que utilizo normalmente no es este. Hace poco gracias a SentidoWeb, encuentro las buenas prácticas de desarrollo Javascript por parte de Google, que siempre te las tienes que tomar como recomendación y aceptarlas bajo tu propio criterio. Sobre todo, el artículo tiene como objetivo tener apuntado los enlaces a las buenas prácticas de Javascript, que aunque sean de Google son muy completas con ejemplos y con el "deberías y no deberías hacer" de cada cosa. De esta manera encuentro las cosas más fácilmente. Y de paso ya hago referencia al artículo que escribí en su día sobre las buenas prácticas de Php.... - Que es el TOP 100 PERCENT de SQL Server
Que es el TOP 100 PERCENT de SQL Server
Que es la sentencia TOP n PERCENT y porque se inserta al crear vistas en SQL SERVER. En ocasiones cuando creamos las vistas desde SQL Server, nos inserta la sentencia TOP al principio de la vista, sobretodo cuando existe un "Order By", si tratamos de quitar este código la vista no puede ser creada.Sentencia TOP SQL Server
La Sentencia TOP sirve para limitar el número de filas devueltas por la consulta, ejemplo
Devuelve las 100 primera filas de la consulta, además se puede utilizar la palabra PERCENT para indicar un porcentaje de filas a devolver. Si esta limitación se combina con un "Order By", el resultado devolverá las primeras filas seleccionadas de la consulta ya ordenada. via MsdnSELECT TOP 100 FROM MyTablePorque se inserta TOP 100 PERCENT
La sentencia ORDER BY es una sentencia estándar del SQL ANSI. Pero cada base de datos amplia este lenguaje para ayudar a los desarrolladores, dando funcionalidades no estándars. SQL Server ha ampliado el uso del ORDER BY para que se pueda utilizar en otros lugares, como subconsultas, una ampliación que no pertenece al estándar. Este cambio ha provocado que el ORDER BY en SQL Server no ofrezca garantías de ordenación en algunos casos, cuando el estándar SQL define que si se utiliza un ORDER BY debe mostrarse las filas ordenadas. Podemos ver la explicación y un ejemplo de esto en el Blog.Msdn, donde nos ilustran y nos comentan que el uso del TOP y ORDER BY es considerado dañino, ya que puede que el resultado no sea el esperado. La siguiente consulta no garantiza el orden, además de que
En cambio, esta consulta si que garantiza el ordenSELECT TOP 99 PERCENT * FROM T ORDER BY col1
La recomendación es siempre poner el ORDER BY en el SELECT más exterior posible, ya que los ORDER BY en subconsultas anidadas no garantizan un orden correcto. Por definición de SQL Server, no se permiten ORDER BY en las vistas, ya que es similar a una tabla que por definición es un conjunto de filas. Para conseguir el resultado de una vista ordenado se le incorpora el TOP 100 PERCENT, aunque la mejor manera seríaSELECT * FROM (SELECT TOP 99 PERCENT * FROM T ORDER BY col1) AS A
Ahora cada cual utilice la forma que más le convezca para obtener las filas ordenadas de una vista....SELECT * FROM VIEW_EXAMPLE ORDER BY MYFIELD - Como escribir desde Base de Datos a un Fichero Fisico con SQL Server
Como escribir desde Base de Datos a un Fichero Fisico con SQL Server
Manipulación de ficheros de texto desde base de datos. Una opción sería crear logs de fichero desde la base de datos, aunque lo normal sería utilizar la propia base de datos para registrar trazas, en ocasiones puede ser una alternativa para funcionalidades específicas. Por ejemplo, en procedimientos automáticos que se ejecutan con tareas programadas o con el servicio SQL Agent de SQLServer. Por si en algún momento nos encontramos con la necesidad de manipular, crear o insertar texto en ficheros físicos (también podría servir para ficheros XML), vamos a crear un procedure de base de datos WRITE_TO_FILE para manipular ficheros, con los siguientes parámetros: Mensaje Ruta Nombre_Fichero... - Donde encuentro los estilos de Fecha DateTime para SQL Server
Donde encuentro los estilos de Fecha DateTime para SQL Server
Los Estilos de Formato de fecha para SQLServer (DateTime Format styles). Siempre que queremos hacer un Cast o un Convert nos encontramos con el dichoso formato de fecha, que cada ordenador tiene configurado (en función del "Regional Language" del panel de Control). Tantos dolores de cabeza y tantas "Chapuzas" que hemos podido hacer los desarrolladores cuando se trata de almacenar y recuperar fechas, y todo para solucionar incidencias con fecha de ayer. El Objetivo del Artículo es encontrar los diferentes estilos de fechas disponibles en SQL Server cuando queremos realizar una conversión a String.DateTime Formats Styles SQL Server
Without century (yy) (1)
With century (yyyy)
Standard
Input/Output (3)
-
0 or 100 (1,2)
Default
mon dd yyyy hh:miAM (or PM)
1
101
U.S.
mm/dd/yyyy
2
102
ANSI
yy.mm.dd
3
103
British/French
dd/mm/yyyy
4
104
German
dd.mm.yy
5
105
Italian
dd-mm-yy
6
106(1)
-
dd mon yy
7
107(1)
-
Mon dd, yy
8
108
-
hh:mi:ss
-
9 or 109 (1,2)
Default + milliseconds
mon dd yyyy hh:mi:ss:mmmAM (or PM)
10
110
USA
mm-dd-yy
11
111
JAPAN
yy/mm/dd
12
112
ISO
yymmdd
yyyymmdd
-
13 or 113 (1,2)
Europe default + milliseconds
dd mon yyyy hh:mi:ss:mmm(24h)
14
114
-
hh:mi:ss:mmm(24h)
-
20 or 120 (2)
ODBC canonical
yyyy-mm-dd hh:mi:ss(24h)
-
21 or 121 (2)
ODBC canonical (with milliseconds)
yyyy-mm-dd hh:mi:ss.mmm(24h)
-
126 (4)
ISO8601
yyyy-mm-ddThh:mi:ss.mmm (no spaces)
-
127(6, 7)
ISO8601 with time zone Z.
yyyy-mm-ddThh:mi:ss.mmmZ
(no spaces)
-
130 (1,2)
Hijri (5)
dd mon yyyy hh:mi:ss:mmmAM
-
131 (2)
Hijri (5)
dd/mm/yy hh:mi:ss:mmmAM
Tabla extraída del MSDN que explica las conversiones entre tipos, las funcionales y las implícitas.... - Diferencias entre Char, Varchar, NChar y NVarchar en SQL Server
Diferencias entre Char, Varchar, NChar y NVarchar en SQL Server
Las diferencias a la hora de escoger campos Varchar, NVarchar, Char o NChar. Es importante la diferencia existente para configurar la base de datos de la forma más óptima. Ya que dependiendo del tipo de campo "String" que configuremos, la capacidad o la información puede variar.Char y NChar
Cuando se configura un campo de tipo Char o NChar estamos indicando campos de tamaño fijo. Es Decir, si configuramos una tabla de la siguiente forma
La diferencia entre Char y NChar es el soporte a carácteres Unicode (los carácteres Unicode ocupan más de 1 byte). Por este motivo a la hora de almacenar algún valor, en el Campo1 siempre ocupará 10 bytes y en el Campo2 20 Bytes.Campo1 Char(10), Campo2 NChar(10)Varchar o NVarchar
Los campos de tipo Varchar o NVarchar son de almacenamiento variable. Es decir, si configuramos una tabla de la siguiente forma
El tamaño almacenado dependerá del valor que se quiere guardar, el número de carácteres sólo configura el tamaño máximo que este campo puede almacenar. En el caso del CampoVariable1 el tamaño máximo será de 10 bytes, y en el caso del CampoVariable2 el tamaño máximo será de 20 bytes.CampoVariable1 Varchar(10), CampoVariable2 NVarchar(10)Unicode o No Unicode
Dependiendo de la información que queremos almacenar en nuestra base de datos, tendremos que definir si permitimos o no valores Unicode (Por ejemplo diferentes idiomas como el Ruso, Japonés, chino, ...). Existen tablas de codificación de caracteres (Encodings) que poseen carácteres específicos de Doble Byte. Esto puede afectarnos a la hora de utilizar campos de tipo Char o Varchar, ya que un texto de 10 carácteres podría superar los 10 bytes, haciendo imposible la insercción del valor a la base de datos.Recomendación
Siempre que dudemos utilizar los campos Varchar y NVarchar, ya que al ser de almacenamiento de tipo variable, sólo ocupará lo que realmente necesitamos. Después habría que analizar si necesitamos almacenar carácteres Unicode o no, y que tabla de codificación vamos a utilizar. Si el Encoding es ASCII, no hace falta que sea Unicode el almacenamiento, pero en caso contrario, recomendaría NVarchar, por seguridad y evitar posibles futuros problemas. Para más información consultar Char, Varchar y NChar, NVarchar... - Crear clases serializables a partir de un Esquema XML (.XSD)
Crear clases serializables a partir de un Esquema XML (.XSD)
Herramienta y ejemplo para crear clases a partir de una definición de clases XSD. En algunas ocasiones necesitamos definir XML de comunicación o para almacenar información, entre otros usos. Lo interesante es que dado un XML podamos generar el código automáticamente a partir de la definición del Schema XML. El Esquema XML es un lenguaje escrito en XML, normalmente con extensión .XSD, el cual nos ayudará a definir estructuras más complejas de los documentos XML, en comparación con el antiguo DTD (definición de Tipos del documento).Generar Clases a partir del fichero .xsd
Por eso es importante poder obtener y generar el código automático que se encargará de procesar el XML basado en el .xsd (esquema xml). Utilizar la herramienta xsd que proporciona el visual Studio (Por ejemplo ubicado en)
La forma de utilizarlo es Invocando al xsd.exe con los parámetros: Fichero.xsd Generación de clases Lenguaje de genraciónC:\Archivos de programa\Microsoft Visual Studio 8\SDK\v2.0\Binxsd.exe esquema.xsd /classes /language:csReferencias
Programandoen.net Msdn.Microsoft... - Historico del Show Log en el Tortoise
Historico del Show Log en el Tortoise
Historico de los Logs con Tortoise para la Gestion del control de versiones con SubVersion. Subversion es una herramienta para el control de versiones de nuestros desarrollos que nos ayudará a orginazar y gestionar el código. El Artículo utiliza nomenclatura específica, si eres un usuario que acaba de comenzar, deberás leer un poco de documentación para entenderlo mejor.Control de Versiones
Subversion es un control de versiones completo, flexible y muy popular. La forma de trabajar con él de forma cómoda es utilizar una aplicación Cliente, por ejemplo Tortoise Documentación Subversion Descargar Tortoise Las buenas prácticas recomiendan, que dividamos el Repositorio (almacen de código) en tres carpetas Tags (para las versiones entregadas Trunk (para desarrollo base) Branch (para desarrollos paralelos, incidencias urgentes, ...)Historico Show Logs
En ocasiones es crucial saber cuando se ha realizado un determinado cambio, identificar a la persona, que se ha realizado y porque. Por eso la opción Show Log del Tortoise es tan importante. Introducir siempre comentarios en cada "Commit" (Subida de código) es vital para un buen funcionamiento de los logs. (se puede configurar en el Subversion para que los comentarios sean obligatorios) Otras veces, tenemos que copiar una version a una rama urgente (De Tags a Branch), para solucionar una incidencia importante. En este proceso también puede interesarnos que los logs muestren todo el histórico. Cuando pulsemos ShowLog, en la parte inferior derecha tenemos la clave. Desmarcamos Stop on Copy/Remove Al finalizar la incidencia y se la volvemos a entregar al cliente, deberíamos crear otra etiqueta (De Branch a Tag), y realizar una Fusión (Merge) con la LineaBase (Trunk). En esta ocasión, también es importante introducir Comentarios correctos que expliquen cual es el alcance de la versión y cualquier información relevante.... - Estupenda coleccion de Apuntes para Desarrolladores
Estupenda coleccion de Apuntes para Desarrolladores
Diversas Chuletas Cheat Sheets para desarrolladores. La colección no es mia ni mucho menos pero si que la enlazamos, el trabajo de recopilar esta inmensa colección de apuntes sobre desarrollo se la debemos a TrazosWeb. Tampoco me las he leído todas, pero si que existen varias Cheat Sheats a las que me gustaría prestar atención con un poco más de calma, pero realmente es una colección de chuletas que tenemos que tener en cuenta si nos encontramos con algún que otro desarrollo en alguno de los siguientes temas HTML5 CSS3 SEO Wordpress Color Javascript JQuery Mootools Prototype Script.aculo.us Php .htaccess Mod_rewrite MySQL Ruby ASP Python Todas las Cheat Sheats de las que estamos hablando la encontréis en 54 Chuletas para desarrolladores. Un artículo que todo desarrollor podría llegar a tener bien guardado para utilizarla cuando le sea conveniente.... - Caracteres especiales en un Like SQL Server
Caracteres especiales en un Like SQL Server
Los caracteres especiales que acepta una sentencia Like en SQLServer. Cuando en la clausula Where de una sentencia SQL queremos realizar búsquedas más personalizadas, lo normal es utilizar un LIKE, aunque esto perjudique al rendimiento, en algunas ocasiones no tenemos otra que utilizarlo.
Más información en LIKE (Transact-SQL)...% Cualquier cadena de cero o más caracteres. _ (carácter de subrayado) Cualquier carácter. [ ] Cualquier carácter individual del intervalo o conjunto que se ha especificado dentro de [*] <em>(Ej. [a-f] o [abcdef])</em> [^] Cualquier carácter individual que no se encuentre en el intervalo o conjunto especificado <em>(Ej. [^a-f] [^abcdef])<(em> - No puede cargar Assembly microsoft.office.interop.word
No puede cargar Assembly microsoft.office.interop.word
Problemas con el Assembly microsoft.office.interop.word en un proyecto web asp.net. Si cuando estamos preparando una aplicación web en un servidor IIS nos aparece un error indicando que no puede cargar o no encuentra la librería, lo más problable es porque no esté instalada. Aunque tengamos el Office instalado, puede que la versión que se encuentra en el servidor no tenga las librerias de interoperabilidad del Offices. Las librerías de interoperabilidad del Office, son componentes COM que nos ayudarán a manejar los ficheros Word, Excel desde nuestras aplicaciones .NET. (en teoría desde otros lenguajes también, puesto que son componentes COM).Solución
Descargar O2003PIA Redistributable Primary Interoperability Assemblies e instalarlas en el Servidor.... - Ha intentado ejecutar un programa CGI, ISAPI u otro programa ejecutable desde un directorio que no permite ejecutar programas
Ha intentado ejecutar un programa CGI, ISAPI u otro programa ejecutable desde un directorio que no permite ejecutar programas
Configurar un Sitio Web (Site Web) .Net en un Servidor IIS. Aunque mi conocimiento en sistemas sea escaso, las pocas veces que he podido pelearme al crear o configurar un sitio web con el Internet Information Services, siempre he estado dando vueltas por las mismas opciones de las Propiedades del Sitio Web Configuración del Usuario, Pestaña "Seguridad de Directorios" - "Atenticación y Control de Acceso": Verificar el Usuario configurado por defecto y revisar si permitimos el "Acceso Anónicmo" Ficheros de inicio, Pestaña "Documentos", verificar que esta agregada la página de inicio. Version Framework .Net, Pestaña "ASP.NET", indicar que versión del Framework queremos que utilice nuestra aplicación web Permisos de Ejecución, Pestaña "Directorio Particular", incidar a la apliación que permite la ejecución de comandos. Cuando estamos configurando una aplicación web .net y nos aparece el error Ha intentado ejecutar un programa CGI, ISAPI u otro programa ejecutable desde un directorio que no permite ejecutar programas el motivo principal es por los permisos de ejecución de la aplicación.Tipos de Permisos de Ejecución
Prestamos atención a las opciones que tenemos a la hora de Administrar la aplicación en el IIS Ninguno, por defecto, para impedir la ejecución de todos los programas o secuencias de comandos Solo secuencias de comandos, para permitir que la aplicación pueda ejecutar código "script" en el directorio. (ActiveX, VBScript, ¿asp.net?) Sec. comandos y ejecutables, para permitir ejecuciones en el motor de secuencia de comandos y ejecutables (.exe, .dll)... - Utilizar la API Ajax de Google para Las Busquedas Relacionadas
Utilizar la API Ajax de Google para Las Busquedas Relacionadas
Utilizar API Ajax Google Search Engine Javascript para ofrecer información, vídeos y artículos relacionados a las búsquedas de los usuarios. El usuario busca en el buscador y la página lo que hace es mostrar artículos y vídeos relacionados en función de las palabras que escribió el usuario en el buscador. Es interesante y útil para el usuario, y se consigue con un pequeño código Javascript que utiliza la API de Google para las Búsquedas (Search Engine).API Google Ajax Javascript
La documentación necesaria esta en Code.Google. Es completa y fácil de seguir para utilizarlo sin muchas complicaciones. Actualmente podemos verlo desarrollado en komoloves. Imaginar que un usuario busca "Configurar Torrent" en un buscador, y accede a un artículo nuestro, ¿No sería interesante mostrar al usuario resultados relacionados a esas palabras?. Podemos mostrar al usuario los artículos relacionados a "Configurar Torrent" que poseemos en el blog, además podemos complementar esos artículos con vídeos relacionados a lo que el usuario esta buscando. Todo esto podemos hacerlo utilizando la API de Google para búsquedas.Conseguir las búsquedas Relacionadas
Para mostrar el resultado correcto, lo primero que tenemos que hacer es obtener las palabras que ha utilizado el cliente en el Buscador. Una vez conseguido, ya podemos utilizar esa información para mostrarle información relevante al usuario. El código lo vamos a estructura en 3 partes, Carga, Desarrollo y Presentación (Mas o Menos). En el head de nuestra página, obtenemos las palabras utilizadas por el usuario e inicializamos la librería de Google tal y como nos indican en la API de Búsquedas, siempre y cuando haga falta.
El método en Javascript OnLoadSearchRelated crear y configura las búsquedas que queremos mostrar al usuario con información relevante. Necesita las palabras clave y un domino para restringir los resultados a un dominio concreto.<?php $keysreferrer = getKeywords(); if($keysreferrer!='') { ?> <script src="http://www.google.com/jsapi?key=ABCDF" type="text/javascript"> </script> <script language="Javascript" type="text/javascript"> //<![CDATA[ google.load("search", "1", {"language" : "es"}); function OnLoad() { var keys = ''; var domain = 'komoloves.com'; keys = "<?php echo $keysreferrer; ?>"; OnLoadSearchRelated(domain, keys); } google.setOnLoadCallback(OnLoad); //]]> </script> <?php } ?>
Por último un lugar donde queremos ubicar los resultados, en el caso de komoloves, en el sidebar.function OnLoadSearchRelated(domain, keywords) { // Create a search control var searchControl = new google.search.SearchControl(); var options = new google.search.SearcherOptions(); options.setExpandMode(google.search.SearchControl.EXPAND_MODE_OPEN); var siteKomoloves = new google.search.WebSearch(); siteKomoloves.setUserDefinedLabel(domain); siteKomoloves.setUserDefinedClassSuffix("site"+domain); siteKomoloves.setSiteRestriction(domain); searchControl.addSearcher(siteKomoloves, options); var siteYoutube = new google.search.VideoSearch(); siteYoutube.setUserDefinedLabel("Videos"); siteYoutube.setUserDefinedClassSuffix("siteYoutube"); searchControl.addSearcher(siteYoutube, options); searchControl.draw(document.getElementById("searchcontrol")); searchControl.setResultSetSize(google.search.Search.SMALL_RESULTSET); // Execute an inital search searchControl.execute(keywords); }
Espero que os sea de ayuda....<?php $showdiv = getKeywords(); if($showdiv!=''){ ?> <div class="box-sidebar-380"> <div id="searchcontrol">Loading...</div> </div> <?php } ?> - Obtener las palabras de busqueda del Usuario
Obtener las palabras de busqueda del Usuario
Obtener las palabras utilizadas por el usuario en el buscador con Php que las condujo a un artículo de nuestra página. Conseguir las palabras que utilizó el usuario es interesante para ofrecer información relacionada, sino no tendría mucho sentido. También podemos utilizarlo en la página de error 404 y mostrar artículos que acordes a lo que el usuario quiso buscar. Lo primero es tener un objetivo claro y saber que queremos hacer con esas palabras claves del usuario, después es sólo cuestión de gustos a utilizarlas para ofrecer información importante.Código Php
La clave esta en utilizar la URL de referencia, en PHP con $_SERVER['HTTP_REFERER'].
Código extraído de stevenyork. Esto nos devuelve un Array con las palabras de referencia. También podemos ver el código de codingforums o codeproject. Para recuperar la lista de palabras de la búsqueda sólo tenemos que recorrer el Arrayfunction getKeywords() { $refer = parse_url($_SERVER['HTTP_REFERER']); $host = $refer['host']; $refer = $refer['query']; if(strstr($host,'google')) { //do google stuff $match = preg_match('/&q=([a-zA-Z0-9+-]+)/',$refer, $output); $querystring = $output[0]; $querystring = str_replace('&q=','',$querystring); $keywords = explode('+',$querystring); return $keywords; } elseif(strstr($host,'yahoo')) { //do yahoo stuff $match = preg_match('/p=([a-zA-Z0-9+-]+)/',$refer, $output); $querystring = $output[0]; $querystring = str_replace('p=','',$querystring); $keywords = explode('+',$querystring); return $keywords; } elseif(strstr($host,'msn')) { //do msn stuff $match = preg_match('/q=([a-zA-Z0-9+-]+)/',$refer, $output); $querystring = $output[0]; $querystring = str_replace('q=','',$querystring); $keywords = explode('+',$querystring); return $keywords; } else { //else, who cares return false; } }$helperterms = ''; $keywords = getKeywords(); if ($keywords) { foreach($keywords as $keyword) { $helperterms.= $keyword.' '; //echo $keyword.' '; } } return $helperterms;Código Javascript
En Javascript para obtener la url de referencia hay que utilizar document.referrer. Podemos encontrar diferentes ejemplos para su uso, por ejemplo en netmechanic.
Con este código daremos las grácias al usuario que nos ha visitado desde la "Url de Referencia"...if (document.referrer != '') document.write('Thanks for visiting from ' + document.referrer); - Plugins de Desarrollo Web para Varios Navegadores
Plugins de Desarrollo Web para Varios Navegadores
Herramientas de Navegador para el desarrollo web. Siempre es útil tener uno de estas herramientas para poder debugar nuestras aplicaciones web. Visualizar el CSS, la estructura de la página, o lo más importante, debugar el Javascript de la página.Internet Explorer
IE Developer Toolbar, para Investigar y modificar la estructura y elementos de la página, así como el CSS aplicado. Download Script Debugger, para debugar el Javascript. Aunque es un poco complicado, puede que en algún momento específico lo utilicemos.
Download y Ayuda Si utilizas Visual Studio, puedes Debuggar el Javascript sin problemas siempre que el código se encuentre en un .js y no esté incrustado en la misma Página.Para habilitar el Debug en el Navegador Tools - Internet Options - Pestaña "Advanced" desmarcar "Disable Script Debugging" <em>(Las dos opciones existentes)</em> Para Abrirlo y Utilizarlo View - Script Debugger - OpenFirefox
Firebug, para la estructura web, los CSS, debugar el Javascript y mucho más. addons Web Developer, Una buena herramienta para el Desarrollo web, fácil e intuitiva de utilizar, y mientras más la utilicemos más nos gustará. addonsChrome
Web Developer Chrome, herramienta para el desarrollo web, css, imágenes, validaciones. Equivale al Web Developer de Firefox. Plugin Dual View, una curiosa herramienta que te divide el Navegador en dos, pudiendo navegar por dos páginas a la vez. PluginConclusión
Cada vez se hace más dificil por la gran cantidad de navegadores, como siempre lo que funciona en uno no funciona en otro. Por eso siempre viene bien este listado de herramientas para Navegadores que nos ayudan en nuestros desarrollos web.... - Acortar las URL con la Api de Bit.ly para PHP
Acortar las URL con la Api de Bit.ly para PHP
Documentación y explicación de como utilizar la Librería Bit.Ly. Hace días vimos como crear métodos para enviar nuestros artículos a twitter o facebook, pero también nos dimos cuenta que se podía mejorar si utilizábamos la Api de Bit.ly.Recursos
Registro en Bit.ly Descargar Librería Bit.Ly Documentación Bit.lyEjemplo de Uso
Para poder utilizar la librería es necesario registrarse, una vez echo esto podemos crear una función para construir la clase y así poder utilizarla sin tener que recordar el login y la contraseña.
Para utilizarlo esfunction CreateBitly() { include_once("bitly.php"); return new Bitly("yourlogin","yourapikey"); }
De esta manera podemos acortar las url en Php, pero si seguimos investigando podemos llegar a utilizar la funcionalidad Bit.ly en Javascript (en la documentación encontraréis lo necesario para utilizar Bit.Ly en Javascript)...function myfunction($title, $url) { $bitly = CreateBitly(); $urlbit = $bitly->shorten($url); //utilizar $urlbit como queramos ... - Crear metodos para enviar a Twitter y a Facebook desde Wordpress (I)
Crear metodos para enviar a Twitter y a Facebook desde Wordpress (I)
Métodos para enviar a Twitter o a Facebook un artículo escrito en Wordpress. La idea es formar una url tal y como la espera Twitter o tal y como la espera Facebook, de momento esta en funcionamiento en Komoloves. Para conseguirlo crearemos dos métodos en el fichero functions.php que nos devuelva la ruta específica, para ello pasamos por parámetro el Título y la Ruta del Artículo del mismo.
Para utilizarlo sólo tenemos que llamarlo de la siguiente manera.function GetTwitter($title, $url) { $link = 'http://www.twitter.com/home?status=RT+@komoloves+'.str_replace(' ','+',$title).'+'.str_replace(' ','+',$url); echo $link; } function GetFacebook($title, $url) { $link = 'http://www.facebook.com/share.php?u='.str_replace(' ','+',$url).'&t='.str_replace(' ','+',$title); echo $link; }
De momento esta es una primera aproximación, ya que se debería mejorar juntando estas funciones con la librería Bitly en PHP, ya que Twitter sólo acepta 140 caracteres. Actualización: Este método es Lento, ya que repercute en la carga de la Página. De momento no se el motivo, pero si he reconocido el problema. Esperemos estar al corriente....<div class="social"> <a href="<?php GetTwitter(the_title('','',false), get_permalink(get_the_ID())); ?>" target="blank" title="send to twitter" rel="nofollow"><img src="<?php bloginfo('stylesheet_directory');?>/images/twitter.png" title="twitter send" alt="Enviar a Twitter" width="165px" height="30px" ></a> <a href="<?php GetFacebook(the_title('','',false), get_permalink(get_the_ID())); ?>" target="blank" title="send to facebook" rel="nofollow"><img src="<?php bloginfo('stylesheet_directory');?>/images/facebook.png" title="facebook send" alt="Enviar a Facebook" width="165px" height="30px" ></a> </div> - 7 Cosas que nos recomiendan para mejorar en el SEO
7 Cosas que nos recomiendan para mejorar en el SEO
Cuestiones a tener en cuenta para mejorar en el posicionamiento web. Hacernos comprender correctamente a los motores de búsqueda es fundamental para que nos premien y nos den una buena posición en las búsquedas. Para ello no viene de más tener en cuenta una buenas recomendaciones. Títulos descriptivos y descripciones tipo resumen acordes al contenido (Nunca Dupliques) Urls con palabras y una estructura de directorios simple Usa un Archivo Sitemap XML para los motores de búsqueda y una ruta de navegación "breadcrumb links" para los usuarios, tipo "Home - Categoria1 - SubCategoria2". Restringir al Robots.txt adecuadamente de todas aquellas páginas repetitivas, o definir mediante la metaetiqueta de la cabecera "robots" con noindex, follow o nofollow Personalizar la página para el error 404 Not Found útil y que no se indexe Textos clarosy un uso del sentido común para las palabras claves Descripciones acordes en los textos Ancla de los enlaces. La mejor recomendación para una correcta optimización y así comenzar por algún sitio, es evitar a toda costa la duplicidad de los textos, en los títulos y las descripciones. Pero una de las mejores prácticas para seguir aprendiendo sobre el tema SEO es suscribirse al Blog de Google para Webmasters... - 9 Cosas que Debemos evitar para ganar puntos SEO
9 Cosas que Debemos evitar para ganar puntos SEO
Cuestiones que tenemos que evitar para una correcta optimización web y un buen posicionamiento en los motores de búsqueda. Títulos repetidos en varias páginas o con nombres genéricos. Tampoco se recomienda que sean muy largos, ni con muchas palabras claves y mucho menos que no estén relacionados con la página Descripciones duplicadas o genéricas, que no tengan nada que ver con la página o que sólo conste de palabras clave URL largas e indescifrables, con varios parámetros o con textos repetitivos. Que varias URL apunten al mismo contenido, vigilar el acceso mediante www o sin él. Una navegación excesivamente complicada para el Usuario o que desde todas las páginas puedas ir a todos los sitios. Tampoco se recomienda el uso de imágenes o animaciones para la barra de navegación (menus) Mala Ortografía, descuidada y que el usuario no entienda. También hay que estructurarlo adecuadamente mediante las metaetiquetas de cabecera siempre que haga falta Texto Ancla de los enlaces genéricos como aquí, este link,... Nombres de imágenes genéricas que no describen su contenido, o nombres muy largos. Tampoco nos ayuda sin en la propiedad "Alt" ponemos muchas palabras clave o descripciones muy largas. Uso de imágenes para indicar texto. Los robots no pueden leer el contenido de la imagen, se centran en su propiedad Alt, les es más fácil y sencillo leer Texto plano, por eso es normal que se premie Que los robots de los motores de búsqueda puedan acceder a todos los lugares de tu página. Permitir que obtengan muchas páginas similares sin valor añadido Una de las frases que escuche en una conferencia fueTodo lo que hagamos que le de más trabajo a los robots de los motores de búsqueda ¡Malo!
Por lo que deducimos que la sencillez y simplicidad es un premio para los desarrolladores del que se beneficia el usuario.... - SEO para principiantes orientado a Motores de Busqueda
SEO para principiantes orientado a Motores de Busqueda
Basado en el Informe de Google Guía de Optimización para Motores de Búsqueda especialmente escrito para Principiantes, del cual vamos a sacar los puntos claves en el SEO, y después todo aquello que tenemos que evitar hacer y que nos recomiendan.Puntos Clave
Crear títulos únicos y precisos para cada página Utilizar descripciones mediante la etiqueta meta description únicas URL claras y descriptivas Una buena Navegación orientada al Usuario Crear contenidos originales Utilizar las etiquetas de Cabecera <h1>,<h2>,... bien estructuradas Los enlaces mediante un texto Ancla descriptivo Optimizar el uso de Imágenes y no olvidarse de la propiedad "Alt" Definir un Robots.txt acorde a nuestras necesidades Preguntarse si podemos poner la propiedad "nofollow" a los enlaces Todos estos puntos clave, son apreciaciones que deberíamos ir profundizando uno a uno, y para ello es cuestión de leer y tener paciencia.Conclusión
De momento ya tenemos trabajo, porque la duplicidad del contenido es uno de los temas más penalizados por los motores de búsqueda y uno de los más difíciles de conseguir. Este pequeño resumen pretender ser una guía SEO para principiantes (donde me incluyo) y así poder ir optimizando nuestras páginas webs.... - Referencias de Ayuda para las plantillas Word y su combinacion de Correspondencia
Referencias de Ayuda para las plantillas Word y su combinacion de Correspondencia
Consiste en generar Plantillas Word para combinar la correspondencia y presentar las diferentes funcionalidades que podemos utilizar. En sí es un listado de referencias hacía las ayuda de Microsoft, pero queda mucho mejor si las ponemos todas juntas.Como Combinar la Correspondencia
La idea es contener un documento word y combinarlo con un origen de datos, de esta manera obtenemos un mismo documento pero rellenado con diferentes datos. Suele usarse para mailings, documentación empresarial o publicidad y propaganda personalizada. Visita Combinar Correspondencia con Word. A continuación vamos a poner todas aquellas opciones que siempre nos van a venir bien tenerlas a mano y saber de su existencia.... - Complemento de Seguridad NoScript para Firefox
Complemento de Seguridad NoScript para Firefox
Hace tiempo que uso el Addons o Plugins NoScript para Firefox en el Portatil, y la verdad que va de vicio. Al principio podría ser un poco incómodo, pero es cuestión de acostumbrarse. El Plugins no permite ningún tipo de ejecución, javascript, flash, ... Por lo que impide la infección de la gran mayoría de virus. Lo malo es que la gran mayoría de páginas actuales utilizan Javascript, lo que hace que no funcionen como es debido. Algunas páginas tienen los eventos de Botón programados con Javascript, por lo que podría ser que no nos funcionará un "Buscar" por ejemplo. Esto se arregla rápidamente ya que NoScript posee un registro de las páginas de confianza, pudiendo agregar dominios o permitiéndo la ejecución de forma temporal. Por ejemplo, la posibilidad de que a través de www.google.com, google-analytics nos estre un virus es realmente escasa, por eso se agrega para que permita la ejecución de scripts que vengan desde estos dominios. Lo bueno es que la primera vez que entramos en una página no permitirá que nos haga daño, es mediante la confianza que tengamos nosotros que permitiremos la ejecución o no. Los Videos de Youtube, Flash,... no los ejecuta, somos nosotros manualmente quienes le daremos permiso para verlos si nos interesa. Los banners en Flash no se verán, esto es una gran virtud, la verdad que es el usuario quien coge el control de lo que permite o no permite ejecutar en nuestro Firefox. NoScript lo podemos gestionar desde el Icono que aparece en la barra de estado del Navegador, en ocasiones aparecerá el botón "Opciones" desde donde podremos permitir temporalemente o agregar permanentemente. La utilización de este plugin es un consejo, pero todo queda en vuestra manos.... - Como renderizar un WebControl, por ejemplo un GridView
Como renderizar un WebControl, por ejemplo un GridView
Cuando se utiliza Ajax, es muy posible que necesitemos renderizar o serializar un objeto (convertir a texto/html/xml), para poder utilizarlo desde Javascript en el lado del cliente. En este caso en particular, vamos a ver como renderizar un WebControl desde C#.private string myRenderWebControl(System.Web.UI.WebControls.WebControl ctrl) { StringWriter stringWrite = new StringWriter(); HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); ctrl.RenderControl(htmlWrite); string strHTML = stringWrite.ToString(); return strHTML; }Para que puede servirnos
Imaginaros que tenemos que refrescar una parte de la página con una tabla, una forma sencilla es rellenar un GridView, pero claro los datos los tenemos en el Servidor y no queremos refrescar la página entera. Pues bien, si realizamos una petición al servidor utilizando la tecnología Ajax y tenemos un manejador (.ashx, aspx, ...) que nos construya dinámicamente el GridView. Lo único que tendríamos que hacer es renderizar el GridView y devolverlo hacia el cliente. El cliente solo debería insertar este "string" dentro de un DIV bien situado.
...var ctrl = document.getElementById('elementoId'); ctrl.innerHTML = respuestaAjax; - Como crear una Sesion Infinita o que no caduca nunca
Como crear una Sesion Infinita o que no caduca nunca
En algunos casos, y por petición del usuario, nos pueda interesar que la sesión de nuestra aplicación web no caduque nunca, esto lo podemos hacer mediante Ajax y con un simple timer de Javascript. La idea es crear un timer que cada cierto tiempo lance una petición al servidor, de esta forma conseguimos que la sesión sea infinta. Recordamos las peticiones Ajax realizadas desde Javascript que vimos anteriormente. Lo primero que necesitamos es lanzar un script o llamar a algún método que cree el timer que necesitamos.
Después el código del método MantenerSesionAbierta() para que la sesion sea infinita para el usuario y no caduque nunca (a menos que reinicien el servidor claro)setInterval('MantenerSesionAbierta()', 60000);
¡¡¡OJO!!!, la caché puede hacernos sufrir un poco, por eso lo recomendable es que cuando hagamos la petición al servidor le incluyamos algún parámetro con la hora, minutos y segundos actuales tipo HttpAjaxRefreshSession.ashx?time=HH:mm:ss HttpAjaxRefreshSession.ashx es un manejador de .net para procesar las peticiones en el lado del servidor, pero puede servirnos cualquier otro tipo de página, lo único que debe hacer esfunction MantenerSesionAbierta() { httpsession = getHttpRequest(); httpsession.onreadystatechange = function() { if (httpsession.readyState==4) //4: Completado { if (httpsession.status == 200) //200: OK { res = httpsession.responseText; //o responseXML //ProcesarRespuesta(res, RecuperarPedidoXml); } } } httpsession.open('GET','HttpAjaxRefreshSession.ashx',true); //20 Segundos; Timer var tmrAnular = setTimeout(function(){httpsession.abort();},20000); httpsession.send(null); }
Espero que os sea de ayuda....public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Session refresh"); } - Como crear peticiones Ajax basicas y personalizables sin librerias desde Javascript
Como crear peticiones Ajax basicas y personalizables sin librerias desde Javascript
Ajax (Asynchronous JavaScript And XML) nació de la necesidad de crear aplicaciones web más parecidas a las aplicaciones de escritorio. Realmente el origen del Ajax es para poder realizar peticiones al servidor desde el lado cliente sin necesidad de refrescar la página entera (un proceso lento y que hacía desesperar al usuario en alguna ocasión). Actualmente existen diferentes herramientas y librerías Javascript (jQuery, Prototype, Atlas, ...) que te abstraen de las peticiones Ajax (El Visual Studio lo tiene tan integrado en el desarrollo de aplicaciones Web que ni siquiera te das cuenta de que esta pasando), pero este código nos ayuda a entender realmente el funcionamiento del Ajax y a tratarlo desde las mismas entrañas.Código Javascript para peticiones Ajax
... - Evento unload Javascript para capturar el evento al cerrar un Popup
Evento unload Javascript para capturar el evento al cerrar un Popup
El Objetivo es saber cuando el Popup se cierra para poder hacer lo que queramos con Javascript, de esta manera podemos refrescar datos en nuestra página, es decir; Imaginaros que abrimos un pequeño Popup de selección, una vez el usuario selecciona la opción deseada tenemos que refrescar la pantalla con la descripción y demás información, pues bien, una manera de hacerlo es capturar el evento unload de la ventana.
El código lo que pretende es agregar el método ClosePopup al evento unload o onunload de la Ventana Emergente, para que cuando se descargue salte nuestro método ClosePopup, de esta forma podemos realizar las tareas que necesitemos. Es sencillo, y ahora ya podéis aplicarlo a lo que os Interese. Referencia social.msdn.microsoft...function OpenPopup() { //window.onbeforeunload=ClosePopup; ref = window.open("Popup1.htm?Indice=1&Numero=1", "_blank",'status=no, scrollbars=yes,top=' + (( screen.AvailHeight/2)-260) + ', left=' + ((screen.AvailWidth/2)-400)+ ', height=200, width=200, resizable' ); //ref.close(); if(ref.attachEvent) { ref.attachEvent("onunload", ClosePopup); } else { if(ref.addEventListener) { ref.addEventListener("unload", ClosePopup, false); } else { ref.onunload = ClosePopup; } } } function ClosePopup() { alert('Cerramos el Popup'); } - Altos picos de CPU en el servidor por w3wp.exe, IIS, mcshield.exe o SQLServer
Altos picos de CPU en el servidor por w3wp.exe, IIS, mcshield.exe o SQLServer
Todo comenzó un gran día, digamos que una nueva oportunidad para seguir aprendiendo. El escenario son varios servidores con distintas aplicaciones web que utilizan SQL Server, y el Problema es por el rendimiento (como siempre suele pasar, que la CPU se pone al 100% provocando la desesperación del usuario). Lo primero es identificar las diferentes partes y saber quien se pone al Rojo Vivo, en nuestro caso las opciones eran: w3wp.exe, sqlserver, mcshield.exe o "vete tu a saber".w3wp o Pool de Aplicaciones
En un Servidor IIS, es recomendable utilizar diferentes Pools de Aplicaciones (el proceso que se crea se llama w3wp.exe), pero en ocasiones la página web puede provocar una saturación el servidor. El problema es que si tenemos varios Pools de aplicaciones es difícil saber quien es quien a simple vista, pero siguiendo las instrucciones para saber que pool es el causante, podemos saberlo. Plan de acción Podemos configurar en Propiedades - Rendimiento, opciones tan útiles como "Supervisión de la CPU" para configurar un % máximo, y el "Hospedaje multiproceso" si fuera necesario. Arreglar la aplicación web, porque tiene un problemaMcshield o Internet Security de McAffe
Mcshield.exe es un proceso del McAffe, por lo que es necesario y recomendable, pero como tiene prioridad Alta en el sistema, cuando se pone a trabajar satura al resto. Algunas versiones del McAffe tienen bugs y pérdidas de memoria (como muchos programas), pero es posible que el motivo de que se ponga al 100% sea otro. Puede ser cualquier cosa, así que hay que ir poco a poco revisando las diferentes opciones. Uno de los motivos más simples y sencillos, es porque esta analizando los ficheros de logs de nuestras aplicaciones webs en tiempo real. (parte de nuestros quebradores de cabeza). Sólo tendremos que configurarlo para que excluya aquellos ficheros y carpetas que solemos usar normalmente. Análisis de diferentes tipos de Scripts "ScanScripts", como el Javascript, en tiempo real Análisis del Desbordamiento del Buffer, esto puede provocar pérdida de memoria en algunas versionesSQL Server
SQL Server son las bases de datos de Microsoft, muy esparcida y utilizada. En ocasiones se pone al 100% de CPU y alcanza memorias soñadas para muchos de nosotros. En principio, si con la instalación por defecto funciona bien ¡No la toques!, sino puedes. Configurar una memoria máxima cuando el servidor no esta dedicado para base de datos exclusivamente y se comparte con otras aplicaciones. De esta forma no dejará el servidor sin memoria. Utilizar el Analizador o Profiler del SQL Server para ver que consultas están provocando el problema. Llamar a un DBA (yo no lo soy), pero me baso en que si el SQLServer se pone al 100% es por algo, así que la pesquisa es que es una aplicación quien le esta achuchando, hay que identificarla y ver si lo que hace es correcto o no.Conclusiones
Espero que os sea de Ayuda, si es así "De nada". Normalmente estos problemas del 100% de CPU se solucionan a base de trabajo, pocas veces tenemos golpes de suerte porque suelen influir varios factores. Así que esto no es ninguna biblia, sino más bien un punto de inicio (por lo menos a mi ya me sirve).... - Como Obtener nvarchar de una Función o un Procedure en SQL Server
Como Obtener nvarchar de una Función o un Procedure en SQL Server
Podemos definir un stored procedure o una function dentro de nuestra base de datos sql server para que nos devuelve los valores que necesitamos, todo depende de la necesidad y de la estructura que queramos darle. Todo es cuestión de gustos y "colores".Function
Tendrá una estructura similar aLa Función tendrá una estructura similar a CREATE FUNCTION FooFunc(@ID int) RETURNS nvarchar(10) AS BEGIN DECLARE @FOO nvarchar SELECT @FOO=MyColumn FROM MyTable WHERE id=@ID RETURN @FOO ENDProcedure
El Procedure puede tener un Return, pero mi sospecha es que sólo puede devolver valores de tipo int o similares (Esta es mi sospecha). Normalmente se suele usar para devolver el @@Identity.
Pero si queremos devolver un nvarchar tenemos que utilizar un parámetro de salidaCREATE PROCEDURE FooProc @ID int AS BEGIN INSERT INTO MyTable VALUE ('myvalue') RETURN @@Identity ENDCREATE PROCEDURE FooProcOutput @ID int @OUT nvarchar(10) OUTPUT BEGIN SELECT @OUT =MyColumn FROM MyTable WHERE id=@ID ENDAhora Como llamamos a los Stored para Obtener el Resultado
Si queremos saber además como realizar estas llamadas desde C# y Obtener los valores pertinentes, podemos echar un vistazo a sqlteam, que es la página que me sirvió a mi para averiguar todo esto....--Para una función se realiza desde una Select DECLARE @EXT nvarchar(10) SELECT @EXT = FooFunc(1) --Para un Procedure tenemos dos opciones, con ReturnValue o un Parámetro tipo Output --Utilizando el ReturnValue DECLARE @ReturnValue int EXEC @ReturnValue = FooProc 1 -Utilizando el Output Parameter DECLARE @ReturnValue nvarchar(10) EXEC FooProcOutput 1, @ReturnValue OUTPUT - Validador de Expresiones Regulares Online
Validador de Expresiones Regulares Online
En blogdesarrollo encontré este artículo, donde apuntaba de una herramienta online para testear y validar nuestras expresiones regulares. Estas expresiones son realmente potentes, pero también son realmente complicadas, difíciles y cuando tienes que entenderlas te tiras de los pelos. Por eso es realmente interesante este lugar, porque puede que en algún momento dado nos saque de un apuro. Expresiones Regulares Online Pero también nos pueden servir estos apuntes relacionados con las expresiones regulares, que toda la información referente a este tema nunca esta de más, porque desde una vista ajena no hay quien las entienda. regular-expressions.info, ejemplos y utilidades, como Validar Email: regular-expressions.info regexlib.com, definición de caracteres y ejemplos... - Conectarse y cargar a un Fichero Excel desde .Net c#
Conectarse y cargar a un Fichero Excel desde .Net c#
Al hacer esto, tenemos que pensar en el fichero Excel como en una Base de Datos, con sus tablas (Sheets), con su Esquema, a quien le podemos realizar una serie de consultas Selects, updates, inserts, aunque por regla general lo normal es leer datos, por lo que nos centraremos en el Select por necesidad. Podemos utilizar un dataset, como se ve en el Ejemplo del ODBC o un IDataReader para leer los datos, todo depende de lo que realmente necesitemos.ConnectionString para Conectarse a una Base de Datos Excel
Gracias a connectionstring.com podemos conectarnos como si de una base de datos se tratara, por ODBC o OLEDBstring connectionString = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq="+ExcelPath+";DefaultDir="+System.IO.Path.GetDirectoryName(ExcelPath); string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + ExcelPath + ";Extended Properties=\"Excel 8.0;IMEX=1\"";ODBC
OdbcConnection _connection = new OdbcConnection(connectionString); OdbcDataAdapter _adapter = new OdbcDataAdapter(); OdbcCommand _cmd = new OdbcCommand(); DataSet _data = new DataSet(); _connection.Open(); _cmd.CommandText = "SELECT * FROM "+EXCEL_NOMBRESHEET; _cmd.Connection = _connection; _adapter.SelectCommand = _cmd; //Llenar el DataSet _adapter.Fill(_data, EXCEL_NOMBRESHEET); _connection.Close(); return _data;OleDB
Pero esta vez completamos un poco el algoritmo, para que se cierre siempre la conexión y no deje el fichero Excel "enganchado".OleDbConnection _connection = new OleDbConnection(connectionString); OleDbDataAdapter _adapter = new OleDbDataAdapter(); OleDbCommand _cmd = new OleDbCommand(); DataTable _dataTable = null; System.Collections.ArrayList list = new System.Collections.ArrayList(); try { _connection.Open(); _cmd.CommandText = "SELECT * FROM "+EXCEL_NOMBRESHEET; _cmd.Connection = _connection; OleDbDataReader reader = _cmd.ExecuteReader(); while (reader.Read()) { //myDataObjectAdapter fila = new myDataObjectAdapter(); fila.dato1 = reader[COL_1].ToString().Trim(); //list.Add(fila); } } finally { if (_connection.State != System.Data.ConnectionState.Closed) { _connection.Close(); } } return list;Problema DBNull al recuperar de una Hoja Excel
Por defecto al recuperar los datos del Excel, se cogen los primeros 8 valores y se calcula el tipo de la columna, por lo que si automáticamente se define la columna de tipo numérico y viene una celda de tipo texto, lo que nos retornará será DBNull. A mi se me ha solucionado el problema de la siguiente forma. En Lugar de utilizar el "SELECT * FROM "+EXCEL_NOMBRESHEET podemos definir las columnas que queremos devolver del Excel.
Además de incluir en el connectionstring por OLEDB la propiedad IMEX=1, que indica que puede venir cualquier valor, el problema es que para que funcione correctamente hay que modificar el registro para decirle al Excel que utilice 0 columnas para autodetectar el tipo de la columna. Forzando las columnas a devolver de la consulta se me ha solucionado el problema.string SQLColumns = string.Empty; SQLColumns = "["+COL_1+"], ["+COL_2+"], ["+COL_3+"] "; "SELECT "+SQLColumns+" FROM "+EXCEL_NOMBRESHEETObtener el nombre de la Sheet (Hoja) Excel por Posición.
//OleDB Incluido en el Framework 1.1 _dataTable = _connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //Odbc _dataTable = _connection.GetSchema(); //Sólo válido con Framework 2.0 o superior if (_dataTable == null) { SheetName = EXCEL_NOMBRESHEET; } else { //con OleDB, en Odbc será parecido sino igual SheetName = "["+_dataTable.Rows[0]["TABLE_NAME"].ToString()+"]"; }Leyenda
EXCEL_NOMBRESHEET = "[Hoja1$]"; COL_1, COL_2, COL_3 = "Columna que permite espacios"Conclusión
Espero que os sirva y que os sea de ayuda este "mini" apunte de problemas y soluciones a la carga de un Excel desde .Net C#... - Como hacer Get QueryString desde Javascript
Como hacer Get QueryString desde Javascript
En ocasiones necesitamos recuperar los parámetros que nos pasan por la URI desde el lado cliente, es decir, hacer un tipo de Request.QueryString, pero desde Javascript. Pues bien, si en algún momento habéis necesitado esto, una de las funciones que encontré bastante útil es la siguiente.
vía bloggingdeveloper Existen varias soluciones, pero esta es la que ví que me funcionó, pero ahora que estoy pensando no si funcionará en todos los navegadores, ya que de momento sólo la utilicé en Internet Explorer (Sino recuerdo mal). Espero que os sirva para algo, a mi ya me solucionó algún que otro apuro....function getQuerystring(key, default_) { if (default_==null) default_=""; key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); var qs = regex.exec(window.location.href); if(qs == null) return default_; else return qs[1]; } - Insertar Codigo Html, Php, ... desde un QuickTag de Wordpress
Insertar Codigo Html, Php, ... desde un QuickTag de Wordpress
El objetivo consistía en conseguir que, por Javascript nos apareciera una ventana para que pongamos el código que queremos introducir en nuestro artículo, y que justo antes de devolver el texto que convirtiera los caracteres especiales a código ASCII / HTML. Pues bien, después de ver algunos trucos para poder insertar vídeos de Youtube validados, me pregunté ¿porque no hacer lo mismo con el código?, el resultado y un ejemplo sería algo así.
...//Aquí podemos escribir el código que queramos <div style="color: red"> Probando el nuevo invento <?php echo "cualquier cosa" ?> </div> //Como podemos ver, funciona - Porque Microsoft JScript runtime error: Object expected
Porque Microsoft JScript runtime error: Object expected
Uno de los motivos de que al cargar la página o cuando se intenta acceder desde ella a una función Javascript de el error Microsoft JScript runtime error: Object expected puede ser debido a que no encuentra el método en cuestión. Así que: Revisar que la función que llamáis realmente exista, creo que Javascript es Case Sensitive por lo que tenerlo en cuenta. Revisar que esta incluido el fichero .js que contiene la función en la página Que el fichero esta bien incluido, no dejaros el = cuando hagáis
porque no encontrará el fichero a cargar. Recordad que toda excepción tiene un motivo y no vale darle manotazos a la pantalla, porque eso no lo solucionará. Espero que os ayude, a mi de momento no me ha pasado nunca ... mmmmm ..., bueno pero sólo una vez...<script src="js/code.js" type="text/javascript"></script>