
Hoy me he encontrado con la grata sopresa, por fin SJJ ha sacado la actualizacion del sus EDK con una gran novedad ....... Soporte ethernet !!! para ello tendremos que actualizar la imagen que lleva interna. Muy bien preparado nos presenta un fichero llamado "EDK_Firmware Update.pdf" en el propio fichero la actualizacion.
Descargar
Para tener un MAC se ha de enviar un mail a support@sjjmicro.com con el numero de serie que esta escrito en la parte inferior de la placa, en pocas horas te enviaran el paquete de actualizacion con tu MAC personalizada.
Aqui os dejo con todo lo que se puede jugar:
2 RS-232 serial ports |
COM1 only for Development |
Internal Real time clock/calendar (no battery backup) |
Supported |
16 processor GPIO lines |
Supported |
16 PLD output lines - 8 lines are for high drive output lines |
Supported |
16 PLD 5 volt tolerant input lines |
Supported |
SPI/I2S |
SPI-only |
Green status LED |
Supported |
Internal flash data storage |
Supported |
Battery backed RTC |
N/A |
1 + 2 PWM I/O lines |
Available in v2.5 Update |
5 channels of 12 bit A/D (0 to 3.3V) |
Available in v2.5 Update |
1 10/100 BaseT Ethernet port |
Available in V2.5_Eth Update |
MMC/SD hot-swap socket |
Support available from DotVision.com |
2 USB 2.0 host ports |
|
Aunque parezca molesto el tener que introducir una licencia, Microsoft se ha vuelvo algo mas permisivo ultimamente. Como todos sabemos se permite la instalacion del Sistema Operativo completamente funcional sin tener el numero de licencia a mano, dejandonos un periodo de 30/60 dias para introducirlo.
Siempre puede darnos el caso que por excesiva carga de trabajo, o para maquinas virtuales, no podamos o no nos interese introducir una licencia y simplemente evaluarlo durante un tiempo limitado. Por lo que la permisividad ha sido mayor dandonos la posibilidad de ampliar este periodo con un comando para gestionar las licencias.
En linea de comando podremos ver la cantidad de dias que nos quedan para que cumpla la licencia lanzando desde linea de comando:
slmgr.vbs -dli
Si queremos ampliar este perido simplemente debemos de lanzar el comando:
slmgr.vbs -rearm
Con esto conseguiremo un perido extra para poder ir a comprar el producto o bien rescatar los datos que dejar en ese sistema.
Tambien es factible automatizar este proceso, simplemente teneis que seguir las instrucciones de la knowledge database.
Ya podemos descargar para empezar a realizar las primeras
pruebas de desarrollo con el nuevo MicroFramework, que cada vez mas le
vamos a tener que cambiar el nombre de micro a macro, por la cantidad
de implementaciones que esta teniendo, :) . Las principales novedades son:
- Interop con codigo nativo.
- Touch Screen.
- Inking.
- Soporte para USB.
- Sistema de ficheros.
Para descargarlo primero tendreis que registraros en http://connect.microsoft.com/netmf
y contestar a una pequeña encuesta. Asi entrareis a la comunidad de
desarrolladores y poder participar activamente en este testeo.
Uno de los grandes problemas que tenemos en lo referente a seguridad web,
son los temido ataques "cross-site scripting". Algo que navegadores como
IE (Internet Explorer) solventa con la negacion por defecto de acceso a scripts
que estan hospedados en dominios distintos a los de nuestras aplicacion. Algo
que otros navegadores no han optado por llevarlo desde un inicio.
Esto nos lleva a que si tenemos que empotrar nuestro desarrollo dentro de
un iframe de terceros, hospedados ambos en servidores distintos nuestra
aplicacion funcionara perfectamete en Firefox, Safari, ..... pero no en IE,
dandonos el error de "Access is denied" a ese script.
La solucion es bastante mas sencilla de lo que hayamos podidos leer en
otros sitios (1
y 2),
simplemente tendremos que agregar a nuestra pagina o master page (dependiendo de
donde nos convenga) el siguiente script:
<script type=
"text/javascript">
if (Sys.Browser.agent == Sys.Browser.InternetExplorer){
Sys.UI.DomElement.getLocation=function(a){
if(a.self||a.nodeType===9)
return new Sys.UI.Point(0,0);
var b=a.getBoundingClientRect();
if(!b)
return new Sys.UI.Point(0,0);
var c=a.document.documentElement,d=b.left-2+c.scrollLeft,e=b.top-2+c.scrollTop;
try{
var g=a.ownerDocument.parentWindow.frameElement||null;
if(g){
var f=2-(g.frameBorder||1)*2;
d+=f;e+=f
}
}catch(h){}
return new Sys.UI.Point(d,e)}};
</script>
Espero que os sea util, y no os saque de vuestras casillas las distintas
politicas e interpretaciones de cada navegador.
Para que podamos genera documentos PDF con la facilidad que nos da C# tanto para nuestras aplicaciones de escritorio como para las Web.Con caracteristicas tan interesantes como:
- Crear documentos PDF en tiempo de ejecucion con .NET
- Facil compresion del modelo de objetos para la composicion de documentos
- Posibilidad de dibujar en un pagina PDF, una ventana o una impresora
- Modificar, fusionar o dividir fichero PDF
- Imágenes con transparencia (máscara de color, monocromo máscara, la máscara alfa)
- Nueva concepción, partiendo de cero y escrito enteramente en C #
- Compatibilidad con las clases graficar de .NET
- Incluye MigraDoc Lite de alto nivel con capas de texto (se puede usar tanto PDFsharp y MigraDoc Lite en un solo documento)
Y gran cantidad de ejemplos desde aqui.Como este "Hello World":
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
// Create a font
XFont font = new XFont("Verdana", 20, XFontStyle.Bold);
// Draw the text
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormat.Center);
// Save the document...
string filename = "HelloWorld.pdf";
document.Save(filename);
// ...and start a viewer.
Process.Start(filename);
Desde aqui lo podeis descargar.
Ultimamente me esta dando por experimentar con mi s200, hasta que por fin lo he conseguido. Bueno mas bien lo han conseguido los crack que trabajan en el proyecto linwizard, dadas las similitudes de la HTC Wizard con la Prophet podemos correr perfectamente el kernel montado de una para la otra.
Desde hace tiempo podiamos correr la linea de comandos, pero ya estan empezando a moverse los primeros entronos graficos como GPE, Opie, OpenMoko e incluso Android.
Hoy vamos a correr el primero GPE, aunque es si, recordad que esto es una BETA !!, todo lo que hagais corre a cargo y riesgo vuestro. Pues bien, empezemos a definir los pasos:
- Descargar la distro desde aqui.
- Descomprimir el directorio GWIZARD en la PDA o en una tarjeta SD/MMC
- Simplemente ejecutar "Haret" y clickar en "Run"
- Cuando nos salga "linwizard login:" podremos arrancar la interfaz de red (tenemos que tener conectada la PDA por USB)
- ifconfig usb0 10.100.0.2 up
- telnet 10.100.0.1
- login: root / pass: (en blanco, darle a enter)
- Ya solo nos falta arrancar GPE:
Ya podemos empezar a jugar con este entorno:

Montar tarjeta MMC/SD
Si necesitamos mas espacio de almacenamiento para seguir haciendo pruebas solo tenemos que haber preparado nuestro tarjetero antes de arrancar la distro. Gracias a la iniciativa SD-Workaround podemos hacerlo. Solo tenemos que seguir los siguientes pasos:
- Descargar el zip y descomprimirlo en la PDA (Muy importante que sea en la PDA y no en la tarjeta)
- Arrancar el "ns.exe"
- Cargar "install.ns" : File / Open / install.ns. Obtendras el mensaje "Installation OK"
- Cargar "hideSD.ns" : File / Open / hideSD.ns
- Ahora tienes que sacar y volver a meter la tarjeta.
La siguiente vez que arranques linwizard ya podras detectar la tarjeta en /dev/mmcblk0. En las ultimas versiones la dectecta automaticamente, pero en la 0.2.0 y anteriores tienes que forzarlo para que funcione:
# cat /proc/partitions
major minor #blocks name
1 0 20504 ram0
179 0 1990656 mmcblk0
179 1 78136 mmcblk0p1
179 2 1912512 mmcblk0p2
# cd /dev
# mknod mmcblk0 b 179 0
# mknod mmcblk0p1 b 179 1
# mknod mmcblk0p2 b 179 2
# mkdir /mnt
# mkdir /mnt/sda2
# mount /dev/mmcblk0p2 /mnt/sda2
Montar el rootfs desde una tarjeta MMC/SD
En el primer apartado hemos lanzado el Sistema Operativo desde el initrd, pero ahora vamos a probar a cargar el kernel, pero lanzar el rootfs que este copiado en una tarjeta SD o MMC. En este caso vamos a ver como lanzarlo con el OpenMoko.
Primero preparamos nuestra tarjeta con dos particiones, la primera (mmcblk0p1) un sistema de ficheros FAT y en la segunda particion (mmcblk0p2) ha de ser EXT2. (Dado que existen mil tutoriales de como hacerlo me abstengo de detallarlo)
- En la primera copiaremos el Haret.exe, zImage y default.txt. Desde aqui podremos arrancar nuestro GNU/Linux. El archivo que lleva la configuracion para que arranque el Haret es default.txt por lo que cambiaremos el actual:
set MTYPE 1229
set KERNEL "zImage"
set INITRD "initrd"
set CMDLINE "root=/dev/ram0 ramdisk_size=20504 init=/linuxrc panic=30 video=omapfb:accel console=tty0"
bootlinux
Por el siguiente:
set MTYPE 1229
set KERNEL "zImage"
set CMDLINE "root=/dev/mmcblk0p2 ramdisk_size=20504 init=/linuxrc panic=30 video=omapfb:accel console=tty0"
bootlinux
- En la segunda particion debemos de copiar descomprimido el sistema de ficheros a pelo, como por ejemplo este, (aunque es para el Motorola A780 arranca).

De la misma forma podremos hacerlo con Android en breve.
Mas info:
irc://irc.freenode.org/#linwizard
irc://irc.freenode.org/#htc-linux
Aunque todos virtualizamos, siempre oigo las mismas quejas sobre la interfaz de administracion de Virtual Server R2, dado que la interfaz administrativa es via web perdemos algo de la velocidad que tenemos con los clicks en las aplicaciones de escritorio (bien sea real o bien nos da la sensacion).
Pues bien, tenemos una alternativa poco conocida, incluso con esta herramienta podremos instalar algunas Additions.
Descargar
Muchas veces hemos necesitado obtener la posicion GPS de un punto sin estar alli. para metersela al TomTom, para hacer algun estudio, por curiosidad, ... Pues bien, simplemente siguiendo los cuatro pasos que se muestras a continuacion los tendreis
- Busca el punto que quieres localizar
- Centralo todo lo que puedas
- Pon en la barra de tu navegador (sin espacios entre javascript y void, solo los dos puntos):
javascript : void(prompt('',gApplication.getMap().getCenter()));
- Y ya lo tienes !!! Posicion GPS de SymbiaIT:
![]()
![]()

PD. Muy recomendable tambien pasarse por
http://www.gmap-pedometer.com/ si lo que queremos es medir distancias.
Tiembla IIS !! je ,je , interesante articulo de Oren Eini, en el que nos muestra como programar un servidor web en pocas lineas de codigo en Boo, un leguaje que empezo como experimento inspirado en Python, pero que cada vez coje mas fuerza, dada la comunidad que le acompaña.
import System.Net
import System.IO
if argv.Length != 2:
print "You must pass [prefix] [path] as parameters"
return
prefix = argv[0]
path = argv[1]
if not Directory.Exists(path):
print "Could not find ${path}"
return
listener = HttpListener()
listener.Prefixes.Add(prefix)
listener.Start()
while true:
context = listener.GetContext()
file = Path.GetFileName(context.Request.RawUrl)
fullPath = Path.Combine(path, file)
if File.Exists(fullPath):
context.Response.AddHeader("Content-Disposition","attachment; filename=${file}")
bytes = File.ReadAllBytes(fullPath)
context.Response.OutputStream.Write(bytes, 0, bytes.Length)
context.Response.OutputStream.Flush()
context.Response.Close()
else:
context.Response.StatusCode = 404
context.Response.Close()
Para compilarlo solo
# booi prueba.boo http://localhost:8085/ ~/Desktop/
Si por cualquier motivo no te gusta la devulucion del WSDL que nos brinda un Servicio Web, no te preocupes, todo se puede modificar.Gracias a un articulo de Christian Weyer, puedes alterar, como es este caso la URL que nos devuleve el la etiqueta <soap:address location=http://www.tuURL.com /> o <soap12:address location="http://www.tuURL.com" /> .Casos reales en los que el IIS contesta por el puerto 80 y estan mapeados en el firewall los puertos, existen redirecciones, .....
Creamos un fichero SoapAddressReflector.cs dentro del App_Code
using System.Configuration;
using System.Web.Services.Description;
namespace
SymbiaIT.Tools.Web.Services.Metadata
{
public class SoapAddressReflector : SoapExtensionReflector
{
public override void ReflectMethod()
{
ServiceDescription sd = ReflectionContext.ServiceDescription;
ServiceCollection myServiceCollection = sd.Services;
foreach (Port port in myServiceCollection[0].Ports)
{
foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
{
if (extension is SoapAddressBinding)
{
SoapAddressBinding address = (SoapAddressBinding)extension;
address.Location =
ConfigurationManager.AppSettings["SoapAddress"];
}
}
}
}
}
}
En las secciones pertinentes del web.config
<configuration>
<appSettings>
<!-- URL del web service, para el parseo soap -->
<add key="SoapAddress" value="http://scorm.cuadernia.educa.jccm.es/cuadernia/service.asmx"/>
</
appSettings>
<
system.web>
<
webServices>
<soapExtensionReflectorTypes>
<add type="SymbiaIT.Tools.Web.Services.Metadata.SoapAddressReflector, App_code"/>
</soapExtensionReflectorTypes>
</webServices>
</
system.web>
</configuration>
El proximo dia 29 de Marzo contaremos con la presencia de Hadi Hariri con una estupenda sesion de TDD, ya oodeis apuntaros:
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES

CLMNET.- Hands On Lab.- Desarrollo guiado por pruebas (TDD)
Descripción:
Hadi
Hariri realizará un Hand On Lab (Taller práctico guiado) con una charla
extendida de desarrollo utilizando TDD (Test Driven Development o
desarrollo guiado por pruebas), con un enfoque práctico, con ejemplos,
de cómo resolver casos reales incluyendo aspectos de metodología y de
desarrollo en equipo como:
- Pruebas unitarias
- Mocks (prototipos)
- Arquitectura en capas incluyendo MVC
Ponente: Hadi Hariri
Fecha: Sábado 29 marzo del 2008
Horas: 9:00h a 13:00
Lugar: Laboratorio Software 5, Escuela Politécnica superior de Albacete (EPSA)
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373678&Culture=es-ES
Dado que llevo un tiempo sin escribir, la mejor forma que me ha parecido de retomar la marcha es recordando (en mi opinion) al padre de la notacion en la programacion. Este caballero de origen hungaro, ha estado trabajando durante muchos años en proyectos de Microsoft de los menos conocidos, Word, Excel, ... no se si os sonaran ;)
Y no vamos a hablar sobre su proximo viaje espacial, si no sobre la "Notacion Hungara", obviamente en la epoca que se planteo esta nomemclatura se basaba en usar unos prefijos antes de cada variable:
Prefijo Significado
a de 'array'. Para vectores/matrices/listas de n dimensiones ordenados escalarmente.
b de 'booleano'. Para variables que tomen sólo dos tipos de valores.
c de 'char'. Para el tipo primitivo de carácter alfanumérico individual.
d de 'double'. Para tipos numéricos de alta precisión, como double o float.
e de 'event'. Para eventos.
f de 'función'. Sólo la utilizaremos delante de funciones
cuando se traten de funciones que se añadan como observadores de un
evento (ya que usar esta notación para cualquier método o función sería
bastante engorroso).
g de 'delegated'. Para tipos delegados.
h de 'hashtable'. Colecciones ordenables mediante clave hash (hUsuarios[“juan23”]).
i de 'int'. Para números enteros en general, tanto enteros normales como aquellos tipos enteros de más capacidad (como long).
l de 'lock'. Para objetos de control que nos faciliten el uso de exclusiones mutuas, candados y semáforos.
n de 'enum'. Para tipos enumerados.
o de 'objeto'. Para objetos en general (no se debe usar la
notación húngara para distinguir entre tipos de objetos, salvo escasas
excepciones).
p de 'puntero'. Para lenguajes con aritmética de punteros.
s de 'string'. Para variables de tipo cadena de texto, ya
sean nativos o arrays de chars. Este tipo de datos es muy habitual en
lenguajes sin lógica de punteros. Si se usara el objeto de tipo
“String” en estos casos, acudiremos a este identificador en lugar de al
‘o’ de objeto.
t de 'struct'. Similar al 'o' de objetos, éste se usaría
para variables de tipo struct en general (es decir, objetos de tipo
primitivo).
v de 'variable'. Para variables que adquieran diferentes
tipos de valores. Normalmente sólo acudiremos a esta opción en
lenguajes no tipados (como
JavaScript/
EcmaScript).
La usaremos cuando no estemos seguros del tipo de valor que albergará
una variable. También puede valer para objetos que tengan un tipo
genérico T.
y de 'byte'.
El detalle es que la programacion avanza, y al crearse nuevos objetos, tipos, ... nos encontramos con nuevas posibilidades, y lo peor, que la tecnologia nos permite (en mi opinion) la aberracion de llamar a proyectos que generan dll de la forma "La_Libreria v1.0.dll" vale, muy bien, aplaudo la posibilidad de estas opciones, pero cuando eres desarollador el echo de tenerque picar Shift + guion , el punto, los espacios, .... seamos realistas ES UN INCORDIO !! , y mas, si queremos usar la gran capacidad de cambio de plataforma del .NET hemos de recordar que no todos los sistemas operativos interpretan igual los nombres, sin ir mas lejos la diferenciacion de Mayusculas y Minisculas.
La solucion de este tipo de inconvenientes es obvio, evolucionar la notacion hungara y readaptarla a nuestras nuevas clases. Si queremos simular un espacio se hace cambio de minusculas a mayusculas ( asiDefinimosEspacios ), simpre empezar a escribir con minusculas, cada objeto lo definiremos con dos o tres letras delante. Por ejemplo:
- txtCuadrado: para los TexBox.
- cmbCombo: para los ComboBox.
- rbOpcion: para los RadioButton.
- chkOpcion: para los CheckBox.
- .....
De esta forma el leer codigo de otras personas, junto con los comentarios, nos sera muuucho mas sencillo, hasta el punto en el que solo sepamos diferenciar quien lo has escrito por el nombre de autor que ponga en el comentario y la complejidad de sus algoritmos.
Una propuesta para el nuevo año, ser algo mas seguros de lo que nos encabezonamos algunas veces de practicar, todos sabemos perogrulladas tales como que nuestro servidor web con soporte .NET no nos permitira nunca servir determinados ficheros, tales como cualquier fichero dentro del directorio bin, algunos tales como web.config, y algunos mas que en ningun momento nos interesa que rescaten, dado que acostumbran a poseer informacion comprometida.
El guardar las cadenas de conexion en el web.config es una opcion usado por todos, dada la facilidad de rescatar esta informacion en nuestra aplicacion web, y poder portarla de un server a otro, pero ........
¿Quien no ha modificado alguna vez este fichero y para asegurarse de tener un backup no ha guardado copia del mismo con un cambio de su extion con .OLD, .BAK, .....?
Pues bien, si estas malas formas las realizas en servidores de desarrollo, "hasta cierto punto" no exite mayor problema, el problema real es cuando las haces en un servidor de producion, añadiendole a esto el dejar marcada la casilla de "examinar directorio" con la excusa ...... "es que queria ver si estaba bien subido" u otras similares, ..... ejem, ejem, .....
Cualquiera en este momento diria ....... nadie es tan retorcido para buscar estas cosas ...... pues si, ahi uno, el mas retorcido de todos, nuestro gran amigo GOOGLE !!!, basicamente lanzando ciertas busquedas puedes encontrar informacion muy comprometida de muchos servidores, solo hace falta un poco de paciencia.
Realizemos una busqueda al azar CLICK o CLICK,
¿Os animais a publicar algunas mas ...? ;)
Soy maximo defensor de la competencia, tanto de para mi enemigo, como para mi, basicamente por que esto implica que ninguno de los dos se quedara durmiendo e iremos avanzando la tecnologia, siendo siempre el mayor beneficiario el usuario final. Hasta dia de hoy Windows Mobile es el indiscutible lider en dispositivos moviles, pero poco a poco van naciendo rivales que no son precisamente algo que deberiamos descartar (IPhone, Android, .....). Pues bien, una realidad es OpenMoko (me da que no hay mucho hispanohablante en el proyecto ;) ).
La base de este S.O. es que corre sobre GNU/Linux, dispone de unas buenas SDK, a dia de hoy es compatible con Mono, no un Compact Framework, si no el grande. Basicamente se rompe esa distancia que habia para desarrolladores entre dispositivos moviles y aplicaciones de escritorio.
El proyecto en principio se penso para el Neo 1973, pero gracias a la flexibilidad de GNU/Linux, se ha portado para otros muchos, como la HTC s100, Motorola A780, PALM TX, ....
Desde Windows
Descargar el emulador, y correr el run.bat, se basa en el emulador qemu que al estar portado para Win32 no tendremos problemas.
Desde GNU/Linux:
Preparamos el sistema
apt-get install netpbm libsdl1.2-dev gcc-3.3
Descargamos la ultima version del SVN
svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973
cd qemu-neo1973
Configuramos y compilamos:
./configure --target-list=arm-softmmu # GCC 3.x will be required, see --cc=
make
Descargamos la ultima ROM y Flash
openmoko/download.sh
openmoko/flash.sh
Ejecutamos y a clickar !!
arm-softmmu/qemu-system-arm -M gta01 -m 130 -mtdblock openmoko/openmoko-flash.image -kernel openmoko/openmoko-kernel.bin -usb -show-cursor
Y ya podemos disfrutar del sistema de nuestro amigo o enemigo ;)