sabato, dicembre 22, 2007

Bleach, The Film

I'm going to make a film on Bleach, obviusly I gonna to interprete Kurosaki Ichigo,
did you think I'm joking? ok, take a screenshoot of the film:


Me, Hollow by ~kentaromiura on deviantART







Ps. ok, i was kidding, but if someone would make a film on Bleach, please take me in consideration, I'm the Perfect Kurosaki Ichigo ;D

martedì, dicembre 04, 2007

24ways - Capturing Caps Lock

Today i read this interesting Post on 24 ways: Capturing caps lock
Stuart use the Shift status to understand if Caps Lock in On or Off,
is a very good script, but it miss some particular cases:

when someone type the ascii code using ALT + code,
for example ALT + 65 is the same to write capital A,
so if we wrote ALT 65 on the form, the form alert us that we have CAPS lock on :D
Since i think nobody wrote password using Ascii code (unless they write strange character) this code is a big usability and accessibility tricks!

lunedì, ottobre 29, 2007

[jsn]getElementByClass revisited

Today me and my friends Andr3a had a talk about getElementsByClassName,
I had the idea to write my own implementation since 1 year ago,
in that time I first saw firefox document.evaluate and I blogged to remind myself that I must wrote a better implementation.
The original one was based on Dustin Diaz works.
Seems that the day is come for me, so I've taken my previous work and i've done a lot of optimization, i think now is one of the fastest that you can find around the net
...here the code:


getElementsByClassName.js

/*Kentaromiura 1.0 version*/
document.getElementsByClassName = function(searchClass,tag,node){
var p = function(){
if([].push)return function(a,b){a.push(b)};
return function(a,b){a[a.length]=b}
}();

node = node || document;
tag = tag || '*';

if(document.evaluate){
var xpr = document.evaluate([".//",tag,"[contains(concat(' ',@class,' '),' ",searchClass," ')]"].join(''),node, null, 0, null),
t = true,
els = new Array();
while(t=xpr.iterateNext()){
p(els,t);
}
return els;
}


var els = node.getElementsByTagName(tag),
pattern = new RegExp(["(^|\\s)",searchClass,"(\\s|$)"].join('')),
ce = new Array();

for (var i = 0, max = els.length; i < max; i++) {
if(pattern.test(els[i].className))
p(ce,els[i]);
}
return ce;
}


Tomorrow I will test it more, for now i only can say that it will work on
IE7, FF 2.0.x.x and safari 3.0.3
Teoretically it should work with IE4+, NN 7+,opera 8+ ff 1+ but keep this as not sure
since I can't test it right now.
So if you can leave a comment with your browser I would be grateful.

Ps. since I share my ideas with andr3a, he had wrote his own implementation,
it is very similar to my approach but it's different in some way, so be sure to take a look at his work

bye ;D

sabato, ottobre 20, 2007

post informativo: eliminazione adsense

Come potete notare ho eliminato adsense dal mio blog, mi è servito nel breve periodo in cui l'ho utilizzato a fare alcune statistiche, ho lasciato comunque la barra di ricerca di google perchè ho visto che è stata utilizzata diverse volte.

ho aggiunto comunque analitycs per vedere se il blog necessita di modifiche al layout o se, come penso, i contenuti sono accessibili senza troppi problemi..

sto inoltre rivalutando l'ipotesi di riabilitare i commenti anonimi in un futuro prossimo, faccio però notare che l'iscrizione a blogger è gratuita.

Alla prossima

domenica, ottobre 14, 2007

[jsn]Adobe Flex Presentation - Behaviour - Business Logic

Before I start I would say that I never seen an action script line
before today, day in which I started playing around with FLEX.

Since the Hello World example is old fashioned, I have the great idea to start
with something a bit harder, but just a bit since I want to separate my action script
code from the mxml.
basically i would to use mxml as a presentation layer,
an external file for all the logic (I called it BI.as)
and another AS file for handle the behaviour of my code



Seems that doing so i didn't respect the K&R commandments #0 that is
c:\> Thou shalt not start to learn a language without write THE proper hello world_

so, for that, i had to pay a big pain!
but in the end I'll be forgive and I come to a solution.


here the MXML:
kentatest.mxml

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="oncreation();">
<mx:Script source="BI.as" />
<mx:Script source="behaviour.as" />
<mx:Panel title="kenta template" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
<mx:TextArea id="area1" />
<mx:Button id="btnSubmit" label="Submit" />
</mx:Panel>
</mx:Application>



and here the code, first the Business logic file:

BI.as

public function hello():void{
area1.text='Hello.kenta()';
}


and now the Behaviour file:

behaviour.as

private function oncreation():void{
btnSubmit.addEventListener('click', function (event:MouseEvent):void{
hello();
});
}


so in the end seems that I did i...what?!? why I put that lines in orange?
basically it was the fault that cause all of my pain trying doing this, without that lines
nothing work.
that lines is the same thing of write <body onload="oncreation"
on a HTML page.

so even if I can't completely separate actionscript code from the mxml presentation,
in this way I can add events externally in the behaviour file,
after that i tried to use addEventListener('creationComplete',...
but seems that flex didn't recognise the addEventListener function.

martedì, ottobre 09, 2007

Sorry? what time is now in UK?


THANK YOU FOR ORDERING IN RAINBOWS. THIS IS AN UPDATE.

YOUR UNIQUE ACTIVATION CODE(S) WILL BE SENT OUT TOMORROW MORNING (UK TIME). THIS WILL TAKE YOU STRAIGHT TO THE DOWNLOAD AREA.

HERE IS SOME INFORMATION ABOUT THE DOWNLOAD:

THE ALBUM WILL COME AS A 48.4MB ZIP FILE CONTAINING 10 X 160KBPS DRM FREE MP3s.


Just because I simply can't wait!

sabato, settembre 15, 2007

uIoC - A WINCE IOC library for compact framework 2.0

In these days at workplace i'm working on a WINCE project,
I had to do some optimization to my old code and I wish to make it more readable,
so bearing in mind this I start to Google around
searching for an IoC container/framework that works on Compact framework 2.0 but
I was embittered since i cannot find any IoC implementation for Compact Framework.
Since i haven't special needs instead of using frameworks like spring.net or Windsor
i would use something simple but straightforward, like picocontainer
or this one ;D :
kentaIOC
I start to thought how complex could be to write my own IoC implementation for Compact Framework, I was dazzled when I see that what i needed was so simple to achieve!

So i write my own implementation that let register object and initialize that by constructor.

For now is very basic, need some extra works but since, at least for me,
it do its dirty work i thought to share my efford.

I think somebody can find it useful, so
i opened a project on codeplex, you can find the project page at this address:
uIoc and you can download the source
on the Release page

giovedì, settembre 06, 2007

[jsn]Configuring JSUnit for Visual Studio 200X

I want to share this things, because today it take me a while to get the hang of it.
I now going to explain how to integrate JSUnit into your visual studio 2005/2008 Express/Standard/* version.
the procedure is the same, so now I show you what you need:

I only get this method work on firefox, probably because an IE restriction on file: protocol,
is not mandatory but i reccomend to install this both plugin for Firefox:
Firebug and web developer toolbar

Ok,
  1. open up Visual Studio

  2. On the menu go under Tools (Alt+T)- External Tools (E)

  3. Click on the Add button

  4. in the title box write "JSUnit"

  5. click on the "..." button to search your firefox executable (probably under "C:\Program Files\Mozilla Firefox\firefox.exe") and fill the Command Box

  6. on the Arguments box write "file://path/to/jsUnit/testRunner.html?testPage=$(ItemPath)&autoRun=true"

  7. Click on the OK button



where path/to/jsUnit is the path where you install your jsunit copy.


to test it open the file
path/to/jsUnit/tests/jsUnitAssertionTests and from Tools select JSUnit.

ps.following the instruction on this page
you can also install javascript lint :D

martedì, settembre 04, 2007

KentaIoC - A js IOC library - english version


Thanks to Rey9999 for this marvelous translation.
original document here: Italian version



I've been lately using an IOC framework at my workplace and I grasp the potential of such an approach right from the start, since it lets you keep your classes conceptually separated. 

To achieve this, we follow a single concept: keep the logic that binds the classes together outside of those classes.

Often, in traditional programming, an object "A" inside a method configures another object "B", before calling some other method of the latter.

With Inversion of Control instead, object "A" will never need to configure object "B", instead it will just call it directly.

Probably I was not clear enough, so I invite whoever wishes to understand better this topic to study it deeply elsewhere - I will now pragmatically focus on writing some code which will let us use IOC in JavaScript.


How do we set up IOC?

Usually we have a class "A", keeping inside a member "B" extending a known interface: this way, even if "A" does not know the actual implementation of "B", it can communicate with it, as between "A" and "B" there's a kind of "contract" defined by the interface.

Sure, but in Javascript there are no interfaces, so programming through interfaces is impossible!


Of course, this is the first problem that I will write about.
Let me first point out that JS is a dynamic language and it has no Strict Typing (even if Andr3a will surely argue).

Technically, it could be possible to simulate interfaces using JS - but this would violate the KISS principle, so I will use an alternative approach, that whilst being completely unrelated to interfaces, will let us work around this limitation.

This approach is called Duck typing, that can be summarized as:
<< If our class moves like a duck and has wings like a duck, then for us it's a duck (even if it is actually a pheasant) >>.

Another concept must be explained along with IOC: Dependency Injection,
which roughly says that an object "C" which knows neither objects "A" or "B" will be in charge of putting "the right B" inside "A".

"C" is also our container.


What exactly does a container do?
A container wraps a table uniquely identifying an object instance (usually components: tiny objects which do a single thing - but do it RIGHT), associating an unique identifier to it.

Yeah, right, cool stuff, but isn't it right about time to show some code?

Here's how we can easily manage a container:
var c={};
    //configuration of c
    c.B = { getMessage: function(){ return "test Container" } }
    
    //A doesn't know exactly B it only know that B have getMessage(duck typing approach)
    var A = {
        B: c.B, //A doesn't have the implementation of B,it rely on C to pass the correct one.
        test: function(){ alert(this.B.getMessage()) }
    }
    
    A.test();

Excuse me, but from what I understood so far, isn't "C" just a hashtable?

Well, no. Actually I'm introducing a concept at a time - in our implementation "C" is an hashtable, but to get a correct management of the IOC, this is not enough, a container must do more than that.

Depending on the configuration, a container must be able to instance the correct object (Factory). Here's where injection comes in: our container must be able to inject the object inside another object.

Each framework use different methodologies to inject dependencies. 

The two most common ways, which you will probably find in every framework, are injection by constructor and injection by setter. To keep things simple, my script depends from the extend script by Andrea Giammarchi, so make sure to include before your script.

var A ={
    test: function(){ alert(this.B.getMessage()) } //duck typing 
};

var container = {
    C : {},
     register:function (id,component){
       this.C[id]=component;
     },
     find: function (id){
       return this.C[id];
     },
     bySetter: function(){
       var id=arguments[0];
     
       var Obj = this.find(id);
       
       for(var i=1,max=arguments.length;i<max;i++  ){
         Obj = Obj.extend(arguments[i]);
     
       }

       return Obj;
     
    },
    byConstructor : function(){
  
      var id = arguments[0];
      var pars = new Array();
      for(var i=1,max=arguments.length;i<max;i++  )
       pars.push(arguments[i]);
  

      var Obj=this.find(id);
      return Obj.apply(Obj,pars);
 

   }

}

/*Start setter configuration*/
container.register('AS', A);

container.register('BS', {getMessage: function(){return 'Hello setter injection!'}});
container.register('BS2', {getMessage: function(){return 'Hello setter injection #2!'}});



container.bySetter('AS', {'B': container.find('BS')} ).test();
container.bySetter('AS', {'B': container.find('BS2')} ).test();


/*Constructor injection example*/
function AC(B){

  return {
    test:function(){alert(B.getMessage())}
  }
}

container.register('BC', { getMessage: function(){return 'Hello constructor injection '} });
container.register('AC', AC);


container.byConstructor('AC', container.find('BC')).test();



The reusable part of the script above is the container I wrote. It lets us register the components using register(id, component), as well as searching already registered components with find(id).
Last but not least, it lets you injecting by constructor with byConstructor(id, parameters) and injecting dependencies through a setter with bySetter(id, setterObject)


Finally, thanks to Andrea Giammarchi, you can find the code here: http://www.devpro.it/code/164.html

domenica, settembre 02, 2007

KentaIoC - A js IOC library


English version)



Ultimamente a lavoro sto usando un framework IOC

e fin da subito ho capito le potenzialità di un simile approccio, il quale permette
di separare concettualmente le proprie classi.
Per fare ciò ci si basa su un unico concetto, separare la logica che lega le classi esternamente.

Mentre nella programmazione tradizionale spesso accade che un oggetto A all' interno di un metodo configuri un oggetto B prima di invocare qualche metodo di ques'ultimo,
con l' Inversion of Control A non dovrà mai configurare B ma invocarlo direttamente.

probabilmente mi sono spiegato male e invito chi desiderasse capire meglio il concetto ad approfondire in maniera teorica l' argomento altrove in quanto ora mi concentrerò in maniera pragmatica nella scrittura di un codice che permetta l'utilizzo della IOC in javascript.



In che modo si mette in piedi l'IOC?
normalmente avremo una classe A che contiene al suo interno un membro B
che estende un interfaccia nota, in questo modo anche se A non conosce l'effettiva implementazione di B può dialogare con B poichè tra A e B c'è in piedi un contratto definito dall' interfaccia.
Si, ma in javascript non esiste il concetto di interfaccie, quindi la programmazione attraverso interfaccie non si può usare!
Ovviamente questo è il primo problema da affrontare, e a questo aggiungo che JS è un linguaggio dinamico e non ha lo Strict Type (non è un linguaggio fortemente tipizzato), anche se Andr3a sicuramente mi smentirà. volendo sarebbe possibile simulare le interfaccie in JS ma questo andrebbe contro il concetto KISS, quindi cercando un alternativa userò un concetto che nonostante non c'entri nulla con le interfaccie permette di lavorare lo stesso con questa metodologia.
Questo concetto che andrò a introdurre è il Duck typing,
ovvero se la nostra classe si muove come un fagiano e ha le ali di un fagiano allora per noi è un fagiano, anche se in realtà è un aquila.


Al pari con la IOC c'è un altro concetto, quello della Dependency Injection
che in pratica dice che un oggetto C che non conosce ne A ne B si occuperà di mettere "il giusto B" all' interno di A
C è inoltre il nostro Container.
Cosa fà esattamente un container?
Un container mantiene al suo interno una tabella che indica in maniera univoca un istanza di un oggetto(normalmente sono dei componenti, ovvero dei mini oggetti che fanno solo una cosa, ma la fanno bene) associandogli un identificativo.
Si, vabbè, ma non è ora di far vedere un po di codice?
Ecco come si può gestire facilmente un container.


var c={};
//configuration of c
c.B={getMessage:function(){return "test Container"}}

//A doesn't know exactly B it only know that B have getMessage(duck typing approach)
var A = {
B:c.B,//A doesn't have the implementation of B,it rely on C to have the correct one.
test:function(){alert(this.B.getMessage())}
}

A.test();

Ma da quel che ho capito C è solo un hashtable?
No, in realtà sto introducendo un concetto alla volta, se è vero che C è un hashtable
a tutti gli effetti, per avere una corretta gestione della IoC il container deve fare altro.
In base alla configurazione, il container deve poter istanziare il corretto oggetto (Factory)
ed è qui che entra in azione l'injection, il nostro container deve poter iniettare l'oggetto all' interno di un altro oggetto.
I vari framework hanno varie metodologie per iniettare le dipendenze, sicuramente le 2 più usate e che troverete in qualsiasi framework sono l'iniezione per costruttore e per setter.
per semplificare le cose il mio script dipende dall' extend script di andrea giammarchi
, assicuratevi quindi di includerlo in testa al vostro script

var A ={
test:function(){alert(this.B.getMessage())}//duck typing
};

var container = {
C : {},
register:function (id,component){
this.C[id]=component;
},
find: function (id){
return this.C[id];
},
bySetter: function(){
var id=arguments[0];

var Obj = this.find(id);

for(var i=1,max=arguments.length;i<max;i++ ){
Obj = Obj.extend(arguments[i]);

}

return Obj;

},
byConstructor : function(){

var id = arguments[0];
var pars = new Array();
for(var i=1,max=arguments.length;i<max;i++ )
pars.push(arguments[i]);


var Obj=this.find(id);
return Obj.apply(Obj,pars);


}

}

/*Start setter configuration*/
container.register('AS',A);

container.register('BS',{getMessage:function(){return 'Hello setter injection!'}});
container.register('BS2',{getMessage:function(){return 'Hello setter injection #2!'}});



container.bySetter('AS',{'B':container.find('BS')}).test();
container.bySetter('AS',{'B':container.find('BS2')}).test();


/*Constructor injection example*/
function AC(B){

return {
test:function(){alert(B.getMessage())}
}
}

container.register('BC',{getMessage:function(){return 'Hello constructor injection '}});
container.register('AC',AC);


container.byConstructor('AC',container.find('BC')).test();

La parte riutilizzabile dello script sopra è il container che ho scritto.
Il suddetto container permette di registrare i componenti usando register(id,component)
di cercare i componenti già registrati find(id)
permette infine di iniettare per costruttore byConstructor (id,parameters)
e di iniettare le dipendenze tramite setters bySetter(id,setterObject)


Grazie ad Andrea Giammarchi potete scaricare il codice da qui : http://www.devpro.it/code/164.html

lunedì, luglio 30, 2007

LINQ e Filesystem

La potenza di linq è veramente incredibile,
linq è utilizzabile già su molti tipi come ad esempio i vettori di stringhe,
come ho dimostrato nel post precedente, si può utilizzare questa caratteristica,
assieme ad un altra nuova features di VS 2008 ovvero gli extension method per interrogare in maniera intelligente il filesystem

ad esempio, supponiamo di voler selezionare alcuni files in base ad un espressione regolare, sappiamo che Directory.getFiles ritorna un Array di String..

sarebbe bello poter aggiungere un metodo generico per validare una stringa rispetto a una regular expression..
scopriamo che grazie all' aggiunta del extension method è possibile.
Tutto ciò che dobbiamo fare è creare una classe statica e aggiungere i nostri metodi statici in questo modo:


public static class extension {
public static bool Match(this string me, string regExp){
System.Text.RegularExpressions.Regex rg=
new System.Text.RegularExpressions.Regex(regExp);

return rg.IsMatch(me);
}
}


il this prima del string me aggiunge questa funzione a tutte le stringhe
sarà quindi possibile ora fare "".Match("") !!!
Supponiamo di avere la seguente cartella C:\TEST:



proviamo ora a leggere dalla directory c:\TEST tutti i files che terminano con txt
e facciamoci tornare un po di proprietà del file

var selection =

from file in System.IO.Directory.GetFiles("C:\\TEST")
where file.Match("txt$")
select new {
Path = file,
Name = new System.IO.FileInfo(file).Name,
CreationDate = new System.IO.FileInfo(file).CreationTime,
Directory = new System.IO.FileInfo(file).DirectoryName
};


gridview1.DataSource = selection;
gridview1.DataBind();

testiamo ed ecco il risultato:

Visual studio 2008 and framework 3.5

In questi giorni sto smanettando con la nuova versione di visual studio e soprattutto con LINQ e le query syntax

per esempio supponiamo di avere una lista di nomi e cognomi in questo formato "cognome nome" e di volere ordinare per nome..
un operazione che può sembrare semplice ma che in realtà è piu complicata del previsto..

utilizzando le query syntax e usando LINQ è possibile risolvere quest' operazione in poche righe ad esempio:


var developers = new String[]{
"Carlesso Cristian",
"Giammarchi Andrea",
"Scott Guthrie"
};

var selections = from dev in developers
orderby dev.Split(' ')[1]
select dev;

gridview1.DataSource = selections;
gridview1.DataBind();

vediamo passo per passo quello che ho fatto:
con

var developers = new String[]{
..
}

ho definito un vettore di 3 stringhe nel formato "cognome nome"
da notare che ho utilizzato var anzichè l' equivalente String[]



var selections = from dev in developers
orderby dev.Split(' ')[1]
select dev;

ecco in tutto il suo splendore la query syntax,
tradotta in italiano equivarebbe a qualcosa come:
per ogni stringa contenuta all' interno di developers creami una variabile temporanea
dev che contiene la stringa, poi ordinami le stringhe in base
alla parte a destra dello split ottenuto considerando spazio come token
e ritornami il risultato all' interno di selections



gridview1.DataSource = selections;
gridview1.DataBind();

con queste 2 istruzioni andiamo a popolare un gridview di una pagina aspx

lanciamo il debug e vediamo in output il seguente risultato:





bello ma non mi piace molto il titolo della colonna della GridView.. Item non ha molto senso dopotutto...
perciò torniamo sul codice e modifichiamo la query in

var selections = from dev in developers
orderby dev.Split(' ')[1]
select new {Developer = dev};


cosi facendo abbiamo rinominato la colonna....

e nel frattempo vi ho mostrato qualcosa che sarà molto più utile in uno dei prossimi post..

lunedì, luglio 02, 2007

Giulietta e Romeo 2003

Se non ricordo male nel mio primo post in questo Blog dissi che avrei parlato di Teatro...
solo oggi, con grande ritardo, inizio a proporre i miei vecchi spettacoli scolastici

Ecco il link al mio primo spettacolo uploadato,
questa è ciò che considero la mia peggior interpretazione,
dizione da paura(con notabile intercalare dialettico),
sono riuscito a dimenticare una battuta e recitavo con dei maghi, anzi oserei dire
dei professionisti, dell' impallaggio (ovvero quando l'attore che recita ha una persona davanti che lo nasconde),
siamo andati troppo veloci e ho probabilmente creato troppo rumore e mi muovevo troppo,
dopotutto è teatro scolastico ma questa mia interpretazione è ben al di sotto delle mie reali capacità artistiche, anche se lo spettacolo successivo(recitato subito dopo) andò molto meglio.
Purtroppo non esiste ripresa del 2 spettacolo.
Degno di nota alcuni attori che recitavano con me.


..Ma nulla in confronto al duo formato dal sottoscritto e il grandissimo Filippetto ...che però proporrò più avanti
(non appena verrò in possesso degli originali)
Buona visione

mercoledì, maggio 30, 2007

Sometimes is better to be wrong

Recently i found that the net could be
a very tricky place,
expecially when different people write different things
and some of this are wrong,
sometimes happen to miss the point in a discussion.

so web 2.0 and social bookmark can make you a flamewarrior

I'm a developer, i know lots of developer and in my experience i can say
that for a developer is very hard to admit when he's wrong.

So the point here is to undestand what is wrong, in my case i was talking about a different argoument, and i'm happy to be wrong, cause i learnt something new.

domenica, aprile 29, 2007

Javascript ninja

recently i found this post in meeblog:
http://blog.meebo.com/?page_id=254

scrolling down to the end there is a simple test..

I think that that test is a bit confused, very vague... probably they do on purpose

now i gave the *REAL* (imho) answer to their question,
because i think that they are a good exercise ^_^;;
I hope doing so don't cause problems (I don't want enemy)


1. When does div.setAttribute(”###”) not equal div.###?

this question is vague... here some right answer(on angle brackets my suppposition):



always because ### is not a valid javascript

[if ### is a placeholder for a word]
since div is not defined if ### contains only character valid for a variable (i.e not -)
the error returned is always ("div is not defined");
so they are not equal when ### contains not valid javascript character for a object property.



[if they means DomNode.setAttribute]
since setAttribute want 2 parameter (name and value)
and since the value here is not showned then the first should raise a not enought argument error
the second one simply do nothing so they are always different.



2. What’s the difference between these two statements:

a. var x = 3;
b. x = 3;

[in global scope] there are no difference
[elsewhere] the first one create a private variable instead the second use (or create) a global variable.




3. What’s the difference between:

a. !!(obj1 && obj2)
b. (obj1 && obj2)

al 2 expression return always the same error:obj1 is not defined


[if we suppose that obj1 and obj2 are defined]

AND [if they are in using in a test (for example in a if condition)]
they are always the same since the condition automatically cast them as boolean value

[elsewhere] if they are in an assignment statement the difference is pretty simple

in the first case the returned value is true if both obj1 and obj2 are defined and not equals to false,undefined,null,0 or ''
ELSE the return value of this expression is false

in the second case if obj1 is equal to false,undefined,null,0 or '' the result is obj1 else is obj2


4. Write a one-line piece of JavaScript code that concatenates all strings passed into a function:

function concatenate(/*any number of strings*/) {

var string = /*your one line here*/
return string;
}



since in one line you could write all the code you want(separating with ; )


you could do something like

var string  = [''];(function(a){for(var i=0,max=a.length;i<max;i++)string[string.length]=a[i];})(arguments);string=string.join('');


5. What do these two examples have in common?

Example 1:

var obj = document.getElementById(’adiv’);
document.getElementById(’adiv’).ptr = obj;

Example 2:

function assignClick() {
var el = document.createElement(’div’);

function handleClick() {
el.innerHTML = ‘clicked!’;
}

el.attachEvent(”onclick”, handleClick);
}


both do nothing,
notice that the first could gave an error if there is not an element in the dom with the name adiv or if the node exists but the function is called before the dom is totally parsed (before oncontentload),
the second give an error if executed in an
application/xhtml +xml if the browser is not firefox since innerHTML
should don't exist(firefox is weird here)

martedì, marzo 20, 2007

RAWUW - Ruby Ajax & Webservice UI for Windows

..

In this post I show you how you can use Ajax to develop with a HTML UI with Ruby

Recently I started developing with ruby, with the Windows version to be precise.

I'm very busy at the moment so I need to develop as fast as I can.

I needed a way to design an User Interface with the minimum efford and, since I haven't Internet nor Tk installed on my Windows Machine and I wouldn't spend many time to learn another library to draw something on the screen, I looked around the documentation for something that I already knew..

I saw that Ruby lets you play with WIN32OLE, particularly with InternetExplorer.Application (also known as a WebBrowser control).

In C# you can write a class and expose its properties and methods through the window.external object of the WebBrowser control so that you can use it in javascript

I haven't found a simply way to do this with Ruby.

So I thought how I can associate browser events to ruby code .. I needed a Bridge .. Hey, wait ..AJAX!!


Read More!

giovedì, marzo 15, 2007

recensione joost (1 parte)

Ecco la prima parte della mia personalissima recensione a Joost, la recensione sarà in 2 lingue, italiano e inglese











Cos' è Joost
Il progetto Joost, conosciuto in passato come The Venice Project,
è un progetto degli stessi autori di Skype e Kazaa ovvero Janus Friis e Ikals Zennstrom.
Il progetto è molto interessante poichè mira a diventare la piattaforma di diffusione di contenuti video del futuro.

L' obiettivo è ricreare la senzazione di guardare la TV, sfruttando le tecnologie attuali,
lo streaming dei dati utilizza infatti usa un protocollo P2P e i video sono compressi in formato h264 e trasmessi in tempo reale al momento della richiesta.
La parte più interessante di tutto ciò è che è basato sulla Mozilla Platform,
esattamente come Firefox, questo dovrebbe bastare per far capire che in futuro usciranno plugin e skin per questo programma, oltre ad essere un punto di certezza per la stabilità dell' applicazione.

Il progetto, così come Skype mira ad essere gratuito e già da ora i gestori di Joost hanno stretto accordi con diversi fornitori dei contenuti per assicurare il buon esito del progetto, la piattaforma Joost attira molto sia perchè
dietro ad esso c'e' un gruppo che si è già affermato con applicazioni di successo,
sia perchè all' interno dei contenuti sono presenti dei minispot pubblicitari di qualche secondo che garantiscono ai provider di contenuti i costi di gestione e attirano persone interessate a lucrarci, in un articolo apparso sul Time i 2 creatori stima no che entro 2/3 anni
avremo a disposizione 5000 canali!!!

I video hanno un ottima qualità, come potete vedere dai screenshot allegati a questo post, e sono suddivisi per "Canali", già da ora sono disponibili canali molto interessanti come ad Esempio Fifth gear, un canale inglese che fa recensioni di Automobili, Ci sono vari canali musicali ed alcuni canali di MTV, c'e' un canale (BONG) che trasmette Anime giapponesi(!!)
nella seconda parte della recensione farò una panoramica dei canali disponibili, al momento della stesura e spiegherò il funzionamento delle varie parti che compongono questo software, compresi gli attuali plug-in disponibili(la figura qui a fianco ne mostra alcuni)

lunedì, marzo 05, 2007

Google dom translator scriptlet

Andr3a Giammarchi write a good pieces of code, i make a scriplet to anydays use..

just save this link on you preferites sites
and use where you want.
Click on it to test it
I tried on FF and IE7, enjoy ;)

domenica, marzo 04, 2007

Project venic...I mean joost

I received a beta tester invite for this marvelous program, in these days i m trying it
and soon i will post a review of this product, stay tuned..