Usuarios conectados: 6 Cargando documento...
Buscar:

Geo Visitors Map
RSS
14/07/2010:  TinyMCE Editor for Dreamweaver CS5

A few days ago I uploaded a new widget: TinyMCE Editor for Dreamweaver CS5 via Adobe Widget Browser.

The aim of this widget is just making easier to implement a tinyMCE Editor inside a web page created with Dreamweaver CS5: You won't see advanced features out of the box, but it will make your life easier when you need to show/hide the available buttons, choose a skin or define the width and height of the editor.

You can read more about the widget and download it here.

15/06/2010:  Widgets de ejemplo eSeminar MediterraneoAUG

Ayer, durante el eSeminar que celebró el mediterraneoAUG sobre el uso de Widget Browser, prometí que haría público el widget que utilizamos de ejemplo.

Lo que he hecho son 2 versiones:

La primera es la versión ya empaquetada para importar directamente en Widget Browser:

http://www.tecnorama.org/downloads/cloud_zoom_packed.zip

La segunda es la versión pre-empaquetada, preparada para aquellos que se interesaron en el formato OAM y desean aprender a crear widgets: sólo hay que descomprimirla, importar el archivo cloud_zoom_oam.xml y empaquetar. La versión resultante será idéntica al archivo empaquetado.

http://www.tecnorama.org/downloads/cloud_zoom_source.zip

Los que tengan dudas, pueden utilizar la dirección de correo al final de esta página.

03/06/2010:  HTC and Google Calendar sync issues

Yes, I've been one of the victims of the 'com.htc.calendar has stopped unexpectedly' on my HTC Hero (Android 1.5), so after looking for different solutions this one worked for me:

The problem arises when you have set up a daily task on your Google Calendar: At this point everything works fine: Both calendars sync without issues. BUT...

When you delete the task ONLY FOR ONE DAY (and not the entire task itself) on your Android, you start to see the error. Even more, the HTC calendar won't sync anymore with Gcal (Gcal will still sync, however).

The solution is a bit painful, but it worked for me: On your Android, go to Settings->Applications->Manage Applications... and select the calendar storage proccesses. You must delete the cache and data.

After that, just wait until it sync again with GCal: You should get all the events back to your phone. The bad news is that you will lose the modifications made on your phone while the sync error took place.

05/05/2010:  New Extension: Wordpress translators (beta)

Dreamweaver CS5 Only!!!: This set of translators makes even easier to work with template pages in DW CS5: It translates some of the common functions in every WP template, the loop, the author's name, wp_list_pages, wp_list_categories...

You can see some sample screenshots and download it at the extension's page

30/04/2010:  Widget Browser Extensions for DW CS5

Dreamweaver is finally here, and a wonderful AIR app is here too: Adobe Widget Browser:

The Adobe® Widget Browser is an Adobe AIR® application that lets you preview and configure widgets using a visual interface. The Widget Browser solves the problem of having to work with confusing or obscure CSS and JavaScript by providing designers with a tool for editing widget properties to suit their needs.

I have made a couple of widgets I hope you will like for this release: Twitter Client and LightBox Gallery Widget.

The latter is just a port of the Lightbox Gallery widget for Dreamweaver CS4 (50,000 downloads so far)

Twitter Client is completely new, it's based of a fantastic script by M.Alsup with lots of options:

  • You don't need Server side code
  • You can configure almost anything, colors, dimensions, animations, the keyword you want to use (username, hashtag...)

Download Widget Browser now and start playing!

27/03/2010:  Extending Dreamweaver: Loading custom Strings in HTML

If you are using a xml file to load custom strings, I think you will find useful this feature (I haven't it documented, please email me if I'm wrong):

<MMString:LoadString> is used by DW to load its strings in HTML. So far, so good. The funny thing is that it can also take care of your own ones!. So if you have a string with id="greetings/sayHello" you can write:

<p><MMString:LoadString id="greetings/sayHello" /></p>

The only requirement is loading the namespace with the html tag:

<html xmlns:MMString="http://www.macromedia.com/schemes/data/string/">

And DW will translate it too! So simple and so useful!!

18/03/2010:  Right place, wrong time

Yes, Rome is still in Italy, but we are talking about the OTHER Rome... 

29/01/2010:  Come lo que te damos (pagando, claro) o lárgate

Posiblemente el tema de la semana haya sido el lanzamiento del iPad de Apple. Sin embargo, ver el dispositivo en acción creo que ha provocado más que nunca reacciones (positivas y negativas) dirigidas más al fabricante que al aparato en sí.

Porque el iPad ha demostrado definitivamente hacia dónde se dirige Apple: hacia un sistema cerrado donde controla absolutamente toda la experiencia de usuario, desde las aplicaciones que puede instalar y las que no, los contenidos y cómo acceder a ellos.

No se trata de si tanto el iPhone como el iPad soportan o no soportan Flash (tampoco soporta Java, aunque esto parece que no haya levantado tanto revuelo), se trata de que al usuario ni siquiera se le permite poder utilizarlo. Y podemos seguir: ¿Aplicación de Amazon en iPad para sus libros? NO (sólo de terceros y malas), ¿VoIP? NO ¿Firefox, Chrome? NO ¿Reproductores alternativos? NO, ¿Teléfono libre? NO, NO y NO. Nada que pueda escapar a su control.

De lo que va todo esto es de que tienes que pasar por el aro de Apple sí o sí: Ha conseguido hacerse con el control absoluto de las 3 capas: El hardware, el sistema operativo y todo lo que corra encima de él. Si esto lo hace Microsoft, El número de denuncias llegaría de aquí a la luna.

Supongamos que el iPhone o el iPad fuera un coche: Las condiciones del fabricante serían las siguientes:

  • Nada de cambiarle piezas
  • Sólo podrás instalar los accesorios que venda en mi tienda.
  • Sólo podrás utilizar las carreteras con las que tenga convenio.
  • Sólo podrás utilizar la gasolina que venda en mis surtidores.
  • Incumplir cualquiera de las condiciones anteriores no es que sólo te hagan perder la garantía, sino que es posible que te bloqueemos el coche.

Irónicamente, gran parte de estas limitaciones se efectúan aprovechando software libre y formatos estandarizados: webkit para Safari, ePub... Estoy por jurar que si Adobe les ofreciera un player que Apple pudiera controlar a su antojo (limitando contenidos, por ejemplo) o si fuera directamente open source (para manipularlo Apple a su gusto) hace tiempo que lo habríamos visto en el iPhone.

Y lo más triste de todo es que hay gente a la que todo esto le parece normal.

10/01/2010:  Que le quiten el teclado!

Leido en un comentario de una noticia. Me he limitado a copiar y pegar:

"como puede abre jente taninorante y tan mala y enbidiosa pues esta chica acojido una escedencia meparece mui bien que aga loque quiera por deecho no prejudica anedie esmas adejado unpuesto aotra presona por que cuando se pide una escedencia no te puedes incorporar cuando tuquieras asta que no acabes eltienpo pedido y encima nocobras por lo tanto no veo quesea ninguna estafa asi que enoraguena y noaqueses tan envidiosos"

Alucinante.

18/12/2009:  Extender DW: insertar en xml

Si utilizáis Dreamweaver para manipular archivos XML habréis podido comprobar que no acepta la inserción de objetos y que éstos aparecen deshabilitados.

Esto no es un problema hasta que intentas crear un objeto personalizado que permita insertar por ejemplo un bloque de etiquetas con atributos definidos por el usuario. Imaginemos que tenemos un xml al que deseamos poder añadir desde una ventana modal una etiqueta como:

<vehiculo marca="una_marca" modelo="un_modelo" />

Donde marca y modelo son seleccionados desde un desplegable. En circunstancias normales creamos un objeto con los dos menus y todo funcionando.... pero en xml el objeto aparece deshabilitado!!!

La solución pasaba entonces por crear un comando: No es lo más ortodoxo pero al menos permitía que la ventana apareciera.

Por lo tanto:

  1. Nada de objetos ni de función objectTag()
  2. Crear un comando con una función que añada el texto (tampoco podemos invocar al objeto desde el comando: Ya lo he probado yo por vosotros y no funciona).

Listos? Vamos a por el código:

//array de botones para llamar a las funciones:
function commandButtons() {
return new Array(MM.BTN_OK,"anadirEtiqueta()",
MM.BTN_Cancel,"window.close()",
}

//la función anadirEtiqueta añade la cadena
//para simplificar utilizamos campos de texto
function anadirEtiqueta(){
str="<vehiculo marca=\""+document.form1.marca.value+"\" modelo=\""+document.form1.value+"\">";
dw.getDocumentDOM().insertHTML(str,true);
window.close();
}

Sencillo, ¿verdad?. Pues sí, pero el problema es que tampoco funciona: Por alguna razón desconocida, insertHTML(str) no funciona en el xml. Probemos con otro método:

dw.getDocumentDOM().insertText(str,true);

Nos vamos acercando: Ésta funciona pero mal, ya que reemplaza los caracteres especiales (&lt;vehiculo...)

Nos encontramos en este punto:

  1. Nada de objetos
  2. Nada de dom.insertHTML ni dom.insertText

Y por fín se hizo la luz: El objeto dom.source!!! Este objeto tiene un método que sí que permite trabajar con xml, ya que está enfocado para trabajar sólo código. Y el método mágico insert().

Sólo nos quedaba resolver el último escollo: dom.source.insert() necesita como primer parámetro el punto de inserción (al revés que los métodos anteriores, que lo capturaban automáticamente). Esto sin embargo no es mayor problema utilizando dom.source.getSelection(). El código final fue este:

//array de botones para llamar a las funciones:
function commandButtons() {
return new Array(MM.BTN_OK,"anadirEtiqueta()",
MM.BTN_Cancel,"window.close()",
}

function anadirEtiqueta(){
str="<vehiculo marca=\""+document.form1.marca.value+"\" modelo=\""+document.form1.value+"\">";
//capturamos el DOM del documento
theDOM=dw.getDocumentDOM();
//capturamos la selección: getSelection devuelve un array de dos valores: punto de inicio y punto final
theSel=theDOM.source.getSelection();
//nosotros seleccionamos el punto de inicio
insertPoint=theSel[0];
//lo tenemos todo: hora de insertar
theDOM.source.insert(insertPoint,str);
window.close();
}

Sencillo cuando se descubre.

TECNORAMA es simplemente una página personal. No sirve ni de promoción del autor ni cosas por el estilo.
Todos los códigos, textos y tutoriales son de libre uso mientras se mencione al autor (no es mucho pedir)
Para contactar, puedes enviarme un e-mail a tecnorama@hotmail.com