Ctrl+Alt+Supr, blog de Ollydbg
.MODEL Small .STACK 100h .DATA db msg 'Hello, world!$' .CODE start: mov ah, 09h lea dx, msg ; or mov dx, offset msg int 21h mov ax,4C00h int 21h end start
Hoy revisando el "log" de @MeriDeluxe y @Mericonsolas he visto que a partir de las 00:00 en punto de la noche de hoy miércoles todos los tweets que se intentaban publicar daban un error.
Mirando en la página de desarrolladores de Twitter me he encontrado con esta noticia, donde básicamente se dice que a partir de hoy la API v1 deja de usarse y se deberá usar la API v1.1
Hasta ahora estaba usando Twitterizer (repositorio de git hub aquí) que encapsulaba toda la REST API v1 en una librería para ser usada desde C#/VB.NET sin excesivos problemas (vamos, ningún problema).
Efectivamente, comprobando el código 'in situ' cuando se intentaba crear un nuevo tweet la respuesta origina un error indicando que la API v1 ya no esta soportada y que se migre a la API v1.1
Buscando una solución rápida y que no me implicase demasiados cambios en el código me he puesto a trastear con linq2twitter (o LINQtoTwitter como queráis) que al igual de Twitterizer es una implementación de la API v1.1 para C#/VB.NET
La página de la descarga está aquí (vía codeplex)
Hola. Hoy os traigo una nueva inutilidad para añadir a mi lista de inutilidades :D
En esta ocasión estamos hablando de AvatarBmp.
¿Qué es AvatarBmp?
AvatarBmp es una herramienta que nos permitirá convertir cualquier archivo, ya bien sea un programa, un mp3, una hoja de Excel, o lo que sea en una "foto". Esa "foto" (archivo *.png) la podremos abrir con el Paint, colgarla en internet, enviarla por e-mail, Güasap, etc.
Esa "foto" la podremos volver a convertir en el archivo original:
Podremos seleccionar varios archivos a la vez y "soltarlos" en los botones, tanto para "codificarlos" (generar la foto) como para "descodificarlos" (volver a recupear el archivo original)
Así por ejemplo, si tomamos esta foto y la "codificamos":
Lo que obtendremos será la siguiente imagen:
Hace un par de días Btc me comentaba sobre la posibilidad de que una aplicación de Windows Phone se comunicase con una base de datos de SQL que estaba hospedada en un hosting.
Realizar este tipo de tareas es relativamente sencillo usando servicios web y WCF (Windows Communication Foundation).
El ejemplo que os mostraré hoy se divide en 3 proyectos:
1) El proyecto que accede a la base de datos. Este proyecto será una dll
2) El servicio web basado en WCF que permitirá a otras aplicaciones acceder a la base de datos. Este servicio tendrá como referencia la dll de 1) y se hospedará en un hosting
3) Aplicación de ejemplo, en este caso una aplicación de Windows Phone desde la cual se podrá "manipular" la base de datos mediante el servicio web de 2)
Paso previo. Crear la base de datos/tabla
Lo primero que vamos a crear es una base de datos en nuestro servidor, en este caso SQL Server. En nuestro ejemplo crearemos la siguiente tabla:
El campo id es un campo autonumérico.
La idea es tener una tabla de "puntuaciones" que se podrá actualizar desde una aplicación de Windows Phone, utilizando para ello dos cosas:
Siguiendo el consejo de algunos usuarios de gamefila (ver aquí) he modificado ligeramente el código de @MeriDeLuxe para incluir las nuevas entradas de gamefilia.
Aquí (foro Comunicados y sugerencias) explico algo más sobre el 'bot'
Espero que os sea de utilidad :)
Saludos.
mov eax,ollydbg; Int 13h
https://twitter.com/MeriDeLuxe
La idea de hacer este 'bot' surgió un día revisando el RSS de meneame.net donde aparecía una noticia de alguien que había creado el usuario @nexusnotifier en Twitter y que básicamente te avisaba de la disponibilidad del nuevo Nexus 4.
La idea me pareció pistonuda, y aprovechando que tengo un hosting web medio muerto de la risa y cogiendo polvo, me dije, ¿Por qué no hacer algo similar con los hilos del Off Topic de MeriStation?
Aprovechando alguna que otra idea de la Fisgona de MeriStation , y después de que Cristian_360 (@Sanchez46C) me confirmase que a priori no habría ningún problema, me puse manos a la obra.
MeriDeLuxe es una aplicación web escrita en C#. Se ha usado Visual Studio 2012 y algunas librerías que describo a continuación:
Por mi carpeta de proyectos tenía el código de un "experimento" que programé ya hece tiempo. He decidido compartirlo con vosotros por si a alguien le puede servir para algo.
Ya digo desde aquí que el código no está para nada optimizado, pero puede servir como punto de partida para intentar hacer algo en 3D. El tema es que muchas veces alguien encuentra un motor gráfico pero tiene 300 clases, 120 interfaces, y tal "cacao" de ficheros que antes de poder hacer nada te pasas 2 meses intentando averiguar como funciona el tema.
En mi ejemplo solo tengo 3 clases: La que controla la cámara, la que controla los "cubos" y la que controla la escena final. Ya veréis que el código es tremendamente simplista.
Aquí os dejo unos pantallazos:
Modo "wireframe" (activar con tecla F2)
Modo sólido sin textura
Modo sólido con textura
Utiliza las teclas WASD para moverte. Tienes el resto de teclas que se pueden usar en pantalla
Hoy veremos como guardar y recuperar una imagen que está almacenado en un campo de una tabla de SQL Server.
Dejando a un lado el tema de los FILESTREAM que fue introducido en SQL Server 2008, veremos que es posible guardar y recuperar una imagen desde una tabla "estándar" (nada de tablas de tipo FILESTREAM).
Antes de empezar indicar que existe un campo en SQL Server que es de tipo "Imagen". Sin embargo, siguiendo las recomendaciones de la MSDN (link) no se usará un campo de tipo imagen. Se usará un campo de tipo varbinary(MAX) para dicho propósito, ya que tal y como se indica en el link anterior, el tipo "Image" será eliminado en un futuro:
ntext , text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.
Pues bien, lo primero es crear una tabla para almacenar los datos. Yo he creado una tabla llamada IMAGENES con los siguientes campos:
Ya hace bastante tiempo (Tutorial 22 y Tutorial 23) vimos como acceder a una base de datos y realizar las operaciones más comunes:
En aquellos tutoriales se realizaban las 4 acciones anteriores accediendo directamente a los campos de la base de datos y escribiendo "a mano" las sentencias SQL apropiadas para realizar cada acción.
Hoy os mostraré una forma distinta (ni peor ni mejor, distinta) de como acceder a una base de datos y realizar 4 acciones básicas.
Sin embargo, se usará lo que se conoce como ORM, o lo que es lo mismo: Nuestras tablas actúaran como "entidades", de tal forma que es posible acceder a todo el contenido de las tablas como si fuesen objetos.
La principal ventaja de esto es que no es necesario acordarse "de memoria" de las sentencias SQL, además esta metodología permite muy facilmente realizar apicaciones de N-Capas, o incluso aislar la capa de datos de la capa de negocio y crear un repositorio para comunicarnos via WCF con cualquier otra aplicación.
Antes de empezar dos cosas:
En el Tutorial 14 vimos como simular un entorno isométrico usando GDI+
El GDI+ está "bien" para determinados casos muy puntuales. Sin embargo se queda algo "corto de potencia" en la mayoría de los casos. Aprovechando que XNA4 ya es totalmente compatible con VB.NET en la versión 2010 vamos a ver como hacer lo mismo pero usando toda la potencia de XNA
EL principal "problema" tal y como vimos en el Tutorial 14 que tiene la representación isométrica es la ordenación de los gráficos. (Z-order) En el Tutorial 14 se ordenaban los gráficos en cada ciclo para representarlos de forma correcta con un simple bucle for
En XNA vamos a aprovechar una característica del spritebatch que hace uso del concepto "capa" (layer). De esta forma, no tendremos que tener ningún algoritmo de ordenación que reordene, valga la redundacia, todos los gráficos antes de dibujarlos con un simple bucle for
Si creamos un nuevo proyecto de XNA, cargamos dos Texture2D y en el método Draw hacemos lo siguiente:
En el Tutorial 54 vimos como usar Subversion para nuestro control de código, usando para ello un repositorio de Google Code y u como control de código el AnkhSVN
Tal y como explicabamos en el tutorial anterior, a parte de subversion, existen otros métodos para gestionar nuestro código. Habiamos comentado Mercurial y Git como otros métodos. Hoy precisamente hablaremos de Git, que es sin duda una de las formas más 'populares' de controlar nuestro código.
Además, también comentamos en el Tutorial 54 que al usar Google Code como repositorio, nuestro código tiene que ser público. Que nuestro código sea público no es fáctible en determinados casos (programas de empresa, programas de código cerrado, etc).
En la actualidad hay varios 'proveedores de repositorios de código' muy populares: SourceForge, GitHub y Bitbucket.
Hablando siempre de repositorios gratuitos, tanto SourceForge como GitHub obligan a que el código sea público. Bitbucket sin embargo permite gestionar repositorios privados de código (si, incluso con cuentas gratuitas). Además, Bitbucket permite crear repositorios para "equipos de desarrollo" de hasta 5 desarrolladores (hasta un total de 8 desarrolladores con un sistema de invitaciones)
Sobre Bitbucket hablaremos en próximas entregas: Configurar una cuenta, el sistema Git y Visual Studio (incluida las versiones "Express")
La entrega de hoy básicamente explicará como instalar Git y como usar una carpeta de Dropbox para hacer "push" y tener una "copia de nuestro código en la nube".
Antes de empezar decir que no soy ni de lejos un experto en Git y que usar Dropbox no es la mejor forma de usar Git, sobre todo en desarrollos con varios desarrolladores, valga la redundancia, sin embargo, para desarrollos pequeños/individuales va de fábula, tal y como veréis.
.MODEL Small .STACK 100h .DATA db msg 'Hello, world!$' .CODE start: mov ah, 09h lea dx, msg ; or mov dx, offset msg int 21h mov ax,4C00h int 21h end start
Nuevos enlaces descargas Tutoriales
1 al 24, MouseOdometerNET, PingScanner y
OllySecrets (1 y 2) (Actualización 05/02/2011)
