|
24
julio de
2012
|
|
Durante el día de ayer, 23 de julio, muchos de nuestros clientes han tenido problemas intermitentes para acceder a sus webs y su correo electrónico desde las 7:28 de la mañana hasta las 21:53 de la noche.
El problema ha sido debido a un ataque DDOS (denegación de servicio) sufrido por nuestro proveedor de DNS. Por tanto, aquellos clientes que tienen alojados los servidores DNS con nosotros se han visto afectados. El servicio de DNS es ofrecido gratuitamente por Avanzis, aunque los clientes que ya disponen de este servicio en otros proveedores pueden optar por mantenerlos sin ningún problema. De este modo, aquellos clientes que no tenían delegada la gestión de DNS con nosotros, u otros proveedores afectados por el ataque, no han tenido ningún problema de conectividad.
Qué es un DNS
Un servidor DNS es el que se encarga de traducir un dominio en una dirección IP. Por ejemplo, la cuando alguien pregunta por la dirección “www.avanzis.com” el servidor DNS le devuelve “208.94.147.150”.
Esta información de qué servidor es el que tiene que traducir de nombres fáciles de recordar a direcciones IP está...
|
|
|
01
octubre de
2009
|
Acabamos de liberar la versión 1.0.2 del plugin jquery.oembed. el plugin de jquery desarrollado por Avanzis para facilitar la inserción de recursos usando el protocolo oembed.
Por si te lo has perdido, en mi anterior entrada del blog explicaba qué es y cómo funciona jquery.oembed
Resumen de las mejoras de esta la versión 1.0.2 de jquery.oembed:
- Añadido atributo “alt” a las imágenes de flickr con el título de la imagen, el autor y el servicio.
- El comportamiento por defecto al insertar código es sustituir el elemento por el código del recurso.
- Puedes elegir tres comportamientos diferentes para insertar código del recurso o indicar la función que se va encargar de procesar el código devuelto.
- “replace”. Sustituye todo el código del elemento por el del recurso.
- “fill”. Rellena el elemento con el...
|
|
|
30
marzo de
2009
|
¿Qué es OEmbed?
OEmbed es una API que implementan algunos sitios web como Flickr o Vimeo para facilitar incrustar sus recursos - vídeos, imágenes o contenidos multimedia - en tu página web.
Puedes encontrar más información sobre su funcionamiento y los proveedores que lo soportan en su página oficial:
¿Cómo funciona OEmbed?
Básicamente consiste en ofrecer un método REST que al llamar a una URL que indica el servicio, esta devuelve en formato JSON o XML la información necesaria para incrustar el recurso.
Por ejemplo, si quisiéramos mostrar la imagen de esta URL:
Tendríamos que seguir un complicado proceso para conseguir el enlace correcto o bien utilizar algunos métodos particulares de Flickr...
|
|
|
23
marzo de
2009
|
¿Qué son los “Microformatos”?
Los microformatos son una forma simple de añadir información
semántica a las páginas web, utilizando las herramientas que ya nos proporciona
los estándares definidos en XHTML.
Esta información semántica incluida en las páginas web puede
ser extraída y procesada por los navegadores y los programas y así realizar
ciertas acciones con ellas.
La información que se puede ofrecer con microformatos es muy
diversa, por lo que hay diferentes microformatos, cada uno con su finalidad.
Por ejemplo, podemos ofrecer la información de un evento para añadirlo con
facilidad a tu calendario con el microformato hCalendar o bien los datos
de una persona para guardarlo en tu lista de contactos con el microformato hCard.
¿Cómo se aplican los microformatos a una página web existente?
Lo bueno de los microformatos es que utilizan atributos de
XHTML estándar, por lo que es bastante sencillo aplicarlo a una página web
existente. Los atributos que utilizan los microformatos son:
Estos son atributos que ya existen en XHTML y...
|
|
|
19
marzo de
2009
|
Para celebrar el día de padre, hoy han publicado la versión final de ASP.NET MVC 1.0.
No existen grandes mejoras respecto versión ASP.NET MVC Release Candidate 2, excepto quizá la actualización de jQuery a la versión 1.3.2.
Cuidado si utilizas alguno de estos plugins porque pueden dar problemas:
- PowerCommands - Este lo usaba yo y he tenido que desinstalarlo.
- Clone Detective
- Azure Tools
Han publicado un hotfix que puede solucionarlo:
|
|
|
19
enero de
2009
|
Hoy me he pasado un buen rato intentando averiguar cómocomprobar que un método “mockeado” con Rhino Mocks se llamaba un número determinado de veces. Primero creamos el “mock” del objeto que queremos probar: IMailServiceemailService = MockRepository.GenerateMock<IMailService>(); Ya podemos realizar la prueba, por ejemplo con un controller de MVC al que le pasamos este objeto en el constructor y que cuando se realizauna determinada acción, debe llamar internamente a un método del objeto “mockeado”. TestController invitations =...
|
|
|
14
enero de
2009
|
En las aplicaciones empresariales es imprescindible realizar
operaciones con las bases de datos que se comporten como un todo o que no se
ejecuten si ocurre algún problema.
Supongamos, que
queremos programar una transferencia de dinero entre dos cuentas bancarias. Para
ello, el programa debe restar el importe de la transferencia de la cuenta A y
además aumentar esta misma cantidad en la cuenta B. ¿Qué pasaría si entre una
operación y otra ocurre un error y no estamos utilizando transacción? Pues que la
base de datos se quedaría en un estado inconsistente, y en la vida real seguramente
acabaríamos en la cárcel.
Para evitar el calabozo existen las transacciones.
Si estamos utilizando LINQ to SQL,
uno de los métodos más sencillos para realizar transacciones, es utilizar el
objeto TransactionScope que se encuentra en el
espacio de nombres System.Transactions. Seguramente tendrás
que añadirlo a tus referencias del proyecto porque no está incluido por
defecto.
Una vez añadida la referencia necesaria, comenzamos una
transacción creando el objeto...
|
|
|
14
enero de
2009
|
Una de las formas de establecer las propiedades de los
controles que se crean utilizando los métodos deASP.NET MVC es usar objetos anónimos de C#, como si estos se trataran de un
diccionario.
Por ejemplo, para crear un TextBox con la propiedad ‘MaxLength’
y deshabilitado, usamos la siguiente instrucción:
<%=Html.TextBox("title", ViewData.Eval("title"), new
{ maxlength = 300, disabled = "disabled"
})
Seguir leyendo
|
|
|
26
noviembre de
2008
|
En el posts anteriores ya vimos cómo utilizar y configurar StructureMap para poner en práctica la inyección de dependencias.
Tal y como prometí, ahora vamos a ver un pequeño ejemplo de cómo utilizar el StructureMap y el mocking de objetos en las pruebas unitarias.
Quizá te preguntes que es un “ Mock”.
Un mock, en el contexto de pruebas unitarias, es un objeto “falso” que simula el comportamiento del objeto real, con el fin de realizar las pruebas. En la wikipedia lo asimilan al maniquí que utilizan los diseñadores coches para realizar las pruebas de accidentes.
Te sugiero si utilizas pruebas unitarias, profundices más sobre este tema.
Existen muchas librerías para realizar mocks en .NET.
|
|
|
26
noviembre de
2008
|
Uno de los objetivos que debe tener un buen programador es que su código esté poco acoplado, es decir, que dos componentes con funcionalidades distintas dependan el uno del otro lo mínimo posible. De esta forma conseguirá que sus dos componentes por separado sean reutilizables y más fáciles de mantener.
Para eliminar al máximo la dependencia entre componentes, existe un patrón de diseño conocido como “ Inyección de dependencias” (“ Dependency Injection” o DI). Este patrón consiste básicamente en que en vez de ser una clase la que crea objetos, estos se inyectan o resuelven en el último momento.
Existen diferentes proyectos en .NET que intentan ayudarnos a aplicar este patrón:
|
|
|
29
septiembre de
2008
|
Cuando hoy he leído el último artículo de Scott Guthrie - Scottgu para los amigos –‘jQuery and Microsoft’, me he quedado alucinado.
La noticia en sí es muy buena: van a comenzar a distribuir jQuery, mi librería Javascript favorita, junto con Visual Studio. No sólo eso. Además darán soporte nativo de ‘Intellisense’ en su editor, crearán controles para AJAX Control Toolkit, la integrarán con ASP.NET MVC y contribuirán con pruebas, corrección de errores y parches.
Nosotros ya estamos usando jQuery en nuestros nuevos proyectos, y los diseñadores de Avanzis ya han comenzado a utilizarlo cuando necesitan realizar efectos avanzados con Javascript.
Las principales ventajas de jQuery son:
- No es intrusivo.
Esto significa que no se mezcla el código HTML con Javascript, con lo que se consigue un código más limpio y fácil de mantener.
- Simplifica las tareas habituales de Javascript.
Seleccionar un...
|
|
|
02
septiembre de
2008
|
Desde hace unos minutos está disponible Google Chrome, el navegador web creado por Google.
Lo puedes descargar en este enlace:
|
|
|
29
agosto de
2008
|
!Acaban de lanzar la preview 5 de ASP.NET MVC en Codeplex!
Si eres de los valientes (como nosotros) que estas desarrollando con ASP.NET MVC, recuerda que tendrás que desinstalar la versión anterior antes de instalar este nuevo lanzamiento.
Por si nos os apetece leer, y ya que tengo que revisar los cambios en profundidad, aquí tenéis algunas de las nuevas características respecto a la Preview 4:
- Mejoras en los motores de visualización (ViewEngine)
- Ahora, en vez de ser cada controlador el responsable de decidir que motor de visualización se utilizará, los motores se registran de forma global.
- Se ha modificado la interfaz IViewEngine para que añada el método "RenderPartial".
- Mejoras en los helpers
- Soporte para la renderización de views parciales.
- Nuevo parámetro para poder indicar a un DropDownList cuál será su opción por defecto.
- Se han...
|
|
|
16
julio de
2008
|
Estaba realizando una consulta en T-SQL para mostrar el número de pedidos realizados por día entre dos fechas. Algo relativamente simple, ¿verdad?
Pues aunque parezca increíble, SQL Server no proporciona una función sencilla que permita obtener únicamente la fecha de un campo de tipo DateTime ignorando la hora almacenada. En el caso del informe que quería realizar, me impedía agrupar correctamente los pedidos por fecha porque el campo DateTime también almacena la hora.
Afortunadamente, Anatoly Lubarsky nos proporciona una solución bastante sencilla.
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, CAMPO_FECHA))
Donde CAMPO_FECHA es el nombre del campo de la tabla que contiene la fecha que quieres procesar. También puedes utilizar GETDATE() en vez de CAMPO_FECHA para obtener únicamente la fecha de hoy.
Esta es la consulta SQL resultante:
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, DateCreated)) as OrderDate, COUNT(*) as OrdersCount FROM...
|
|
|
10
julio de
2008
|
!Firefox me encanta!
Firefox es mi navegador favorito para navegar por Internet por su velocidad y simplicidad, pero sobre todo gracias a extensiones como Firebug que son imprescindibles para cualquier desarrollador web.
Me gustaría utilizar este navegador para realizar las pruebas de las aplicaciones en ASP.NET, pero por algún motivo Firefox se muestra extremadamente lento cuando se conecta a las páginas del ordenador local (localhost). ¡Pero esta mañana he leído la solución a ese problema!
Básicamente, consiste en entrar en la configuración avanzada de Firefox, introduciendo about:config en la URL del navegador, y cambiar el parámetro 'network.dns.ipv4OnlyDomains' a 'localhost'.
Pruébalo, y notarás la diferencia.
|
|
|
04
julio de
2008
|
Una de los requisitos más habituales para un buscador es que al realizar las búsquedas no distinga las palabras que se diferencian sólo por acentos. Por ejemplo, si buscas la palabra “como”, también se desea que les aparezcan los resultados con las palabra “cómo”.
Hacer esto es SQL Server es muy sencillo, si sabes cómo.
El truco está en cambiar la intercalación (“Collation” en inglés) del campo en el que quieres buscar o bien de la base de datos completa, para que utilice alguna de las intercalaciones que ignoran los acentos, que son aquellas acabadas en “_IA” (Insensitive Accent).
La sentencia para cambiar una base de datos completa para utilizar la intercalación “Modern_Spanish_CI_AI”:
ALTER DATABASE [nombrebasededatos] COLLATE Modern_Spanish_CI_AI
Si lo que queremos es sólo cambiar un campo de una tabla, el administrador de SQL Server te hace la vida más fácil. Sólo tienes que editar las propiedades de la columna, y quitar la opción de “Distinguir acentos” en el formulario que...
|
|
|
11
junio de
2008
|
Una de las nuevas características de c# 3.0 es la posibilidad de inicializar objetos complejos en el momento que se declaran.
Por ejemplo:
class Coche
{
public string Marca { get; set; }
public stirng Modelo { get; set; }
}
Podemos declararlo indicando ya sus propiedades:
Coche c = new Coche {Marca = "Ford", Modelo = "Focus"};
También puedes utilizar esta característica para añadir elementos a una colección en el momento de declararla:
List<Coche> coches = new List<Coche>() {
new Coche {Marca = "Ford", Modelo="Focus"},
new Coche {Marca = "Seat", Modelo="Panda"}
}
Lo que no tenía claro hasta ahora es cómo inicializar diccionarios y hoy me ha hecho falta en el proyecto que estoy desarrollando utilizando ASP.NET MVC.
En concreto necesitaba un diccionario de tipo IDictionary<string, object> donde indicarle las propiedades html de un textbox. Este es el...
|
|
|
05
junio de
2008
|
Acabo de regresar a la oficina después de un viaje de tres días a Liverpool para participar en un foro sobre servicios web y móviles organizado por el i-techpartner forum. Es el primer evento de este estilo al que voy pero, en vista de los resultados conseguidos, no va a ser el último. Voy a destacar las tres cosas fundamentales por las que ha merecido la pena ir:
- Conocer hacia dónde se está moviendo el desarrollo de aplicaciones web y móviles.
- Networking – o el arte de establecer relaciones con posibles colaboradores y empresas.
- The Cavern – El pub donde empezaron los Beatles, donde nos tomamos una cuantas “pints” de cerveza escuchando música en directo.
El formato que se ha seguido en este foro me ha resultado bastante interesante. Los emprendedores tienen 8 minutos para exponer su idea de negocio y qué es lo que quieren conseguir...
|
|
|
30
mayo de
2008
|
¡Qué ganas tenía de tener una Web de nuestra empresa en condiciones! Si es que ya dicen que en ‘casa del herrero…’. Por fin voy a poder enseñar la web de Avanzis a mi familia, amigos y clientes sintiéndome orgulloso de ella. No es que el diseño anterior de la Web fuera tan horrible – qué voy a decir, si creo recordar que lo hice yo - lo que pasa es que el nuevo me gusta mucho. ¿Quién soy? Por educación y siguiendo el ejemplo de mis compañeros, me presentaré en este primer post. Me llamo Richard Chamorro y soy uno de los fundadores de Avanzis y su director técnico o CTO. ¿De qué voy a hablar en este blog? Principalmente sobre mi trabajo. Pero tengo la suerte de trabajar en cosas que me gustan, por lo que también voy a hablar de cosas de las que me apetecería comentar con algún colega. Siendo algo más...
|
|