Skip navigation.

Monte Fato

Ove risiede Sauron

Posts tagged with "Programming"

Povera Lele

, ,

Eccomi qui, ancora connesso a scrocco alla rete wireless dell'universitá svedese...si sta avvicinando il mio ritorno all'italico suolo (via Ryanair, Goteborg -> Londra, Londra -> Forlí per risparmiare almeno la metá...)...
Siamo quindi ormai alla fine della seconda settimana, e mentre io ho ormai finito il progetto per ED (sono solo in fase testing), e sto studiando la teoria e facendo anche altre cose, la Lele é qui che sta facendo solo quello che le é stato indicato di fare.

Leggere articoli in inglese.

Giusto, per prepararsi alla tesi, non fa poi male leggersi degli articoli in inglese, se poi vuoi entrare nel dettaglio di cosa dovrai fare ecc...

Il punto é che fino ad oggi (ma non son sicuro, ho ricevuto un messaggio singolo sulla GChat), lei non sapeva cosa veniva a fare qui. O meglio, era venuta con l'intento di fare una certa tesi (concordata tra i due professori), ma arrivata qui, trovando il professore mancante per 2 settimane per via di una commozione cerebrale, l'assistente ha detto che fará qualcosa di diverso...si vedrá.
Ma comunque, nel frattempo, l'ha proprio infarcita di articoli tecnici in inglese: 60!

In due settimane, lei se ne é letti circa una trentina, e oggi doveva raccontare all'assistente cosa aveva appreso...La speranza per lei era: "OK, continua a leggerli, ma adesso andiamo anche in lab..."...ma credo, da quanto fosse mogia la sua espressione, che anche la prossima settimana dovrá leggere articoli...

Spero non duri cosí 3 mesi, altrimenti torna pazza :eyes:

Parliamo di altro: sempre negli scorsi giorni, programmando in Eclipse, ogni tanto sentivo il bisogno di segnarmi da parte i "to-do"...in generale me li ricordo, ma si invecchia...
Bene, oggi ho trovato un plugin per Eclipse semplice semplice, ovvero un sistema che permette di prendere note:

http://www.ronxsoft.com/contents/products.html

Semplice ed essenziale...prima (come molti probabilmente), mi creavo all'interno di Eclipse un file di testo e ci scrivevo cosa dovevo fare.
Questo sistema invece ha delle potenzialitá: intanto, dovrebbe essere sempre funzionante, anche cambiando il workspace, e poi permette di fare l'attach della nota al documento al momento aperto (cosí da poter o vedere la nota associata al documento, o dall'insieme delle note vedere a quale documento é associato)

Penso che lo useró...ma avrei qualche idea per estenderlo (dopo tutto, forse quello che serve é anche un sistema di milestones...)

Java: different behaviour between List.contains and Set.contains?


So, since it seems that this blog is much more read when my posts are in English, I'll add another one...this time more technical, about Java.
Today I was working at one of my universities projects, when I found something strange...and I've studied this aspect for about an hour an half.
Let's begin with the environment: I've tested this with on Windows XP, with 2 different jdks:
  • jdk1.5.0_03
  • jdk 1.6.0_01

OK, so this is the base class that I believe that everyone has tried at least once in Java :smile:
public class Tipo
{
  private int tipo;
  
  public Tipo(int tipo)
  {
     this.tipo = tipo;
  }
}

As you know, you should always implement the equals(Object o) method, otherwise you'd been able only to check if the references of two instances of the class Tipo are equal: and that means you need to cast, in order to check it.
But hey, we've got generics now! Is it possible to write something like this?
public class Tipo implements Comparable<Tipo>
{
  private int tipo;
  
  public Tipo(int tipo)
  {
     this.tipo = tipo;
  }

  public boolean equals(Tipo t) {return tipo == t.tipo;}

  public int compareTo(Tipo t) {return tipo - t.tipo;}
}

Yes it's possible, but it's not correct: the equals method isn't type safe like the method compareTo, which means:
  • There is no overriding: this means, if you'll call something like this:
    ...
    Tipo t1 = new Tipo(1);
    Tipo t2 = new Tipo(1);
    System.out.println(t1.equals("pippo"));//correctly return false, but it's calling the equals(Object o) method
    System.out.println(t1.equals(t2));//correctly return true, and it's calling our method
    Object o1 = t2;
    System.out.println(t1.equals(o2));//correctly return false, because it's not calling our method!!
    

  • And so, there is no type checking at compile time. Actually, we've got an overloaded equals, not an overrided.

OK, so it's easy, just don't be stupid and remember to override correctly the equals method...

Now...just imagine I wrote that class, and take a look at this code:
import java.util.*;

public class TestTipaggio 
{
public static void main(String[] args) 
{
Tipo t1 = new Tipo(3);
Tipo t2 = new Tipo(3);
System.out.println("t1 and t2 are 'equal'? " + t1.equals(t2));
                Object o1 = t1;
System.out.println("Are o1 and t2 'equal'? " + o1.equals(t2));
System.out.println("Are t2 and o1 'equal'? " + t2.equals(o1));
                List<Tipo> tipoList = new ArrayList<Tipo>();
System.out.println("Can I add t1 to the list? " + tipoList.add(t1));
System.out.println("Does the list contain t2 (which is 'equal' to t1)? " + tipoList.contains(t2));
                Set<Tipo> tipoSet = new TreeSet<Tipo>();
System.out.println("Can I add t1 to the set? " + tipoSet.add(t1));
System.out.println("Can I add t2 to the set? " + tipoSet.add(t2));
System.out.println("So, Does the set contain t2 (which is 'equal' to t1)? " + tipoSet.contains(t2));

}

}

So, we're using the wrong equals with some typed JCF classes...some methods of the these classes have completely changed, in order to use generics and to be type safe (like Collection add method), while other aren't (like Collection contains) because are still based on not-typed method like equals (check the current javadoc)


boolean contains(Object o)

Returns true if this collection contains the specified element. More formally, returns true if and only if this collection contains at least one element e such that (o==null ? e==null : o.equals(e)).


So, since what's written here, what would you expect? That in both cases the contains method will return false, since the equals method is called on an instance of type Object, and we aren't overriding the equals method, so there is no way it can call my method!
However, these are my outputs, for both jdks:
Are t1 and t2 'equal'? true //calling my method
Are o1 and t2 'equal'? false //calling the method equals(Object)
Are t2 and o1 'equal'? false //again, calling the method equals(Object), it's the first match!
Can I add t1 to the list? true  
Does the list contain t2 (which is 'equal' to t1)? false //OK, calling the equals(Object)
Can I add t1 to the set? true
Can I add t2 to the set? false //...what?
So, Does the set contain t2 (which is 'equals' to t1)? true //How is this possible?

OK, this is weird. How is this possible? The 2 contains method...work on a different way?
It seems like the contains method of the TreeSet (the defined method) is able to call my method on an instance of Tipo, and it receives as parameter an instance of Tipo (this is the only way that that can kind of method can be called).
That, I'd say, it's a kind of bug. The contains of the TreeSet isn't calling the correct equals method...
However, in my personal opinion, it'd be great to change the old equals method and to make it type safe...that would make this problem a non-problem I believe, and it'd help programmers to not make stupid errors.
Remember, always override the equals(Object) method...Does it work on your way? It might be a problem, not something correct...

Edit 29/8: Since I was curious, I've asked about this on comp.java.programmer ng, and what they've told me is that TreeSet uses Comparable<Tipo> in the contains, and not equals (which explains the different behavior)...it seems from the Javadoc that all the contains work the same
http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html#contains(java.lang.Object)


Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e)).


but it's not true if you make errors and you have incosistence between your equals and compareTo method...

Quando la Microsoft non pensa ai piccoli programmatori...

,

:furious:
Siamo in un'epoca nuova: dopo anni di rinunce e tentativi, finalmente mamma Microsft è uscita con una nuova versione di Windows e una nuova versione di Office, i suoi grandi cavalli da battaglia.
Il problema con le nuove versioni di un software come un sistema operativo sono chiare: se non si mantiene un'adeguata compatibilità verso all'indietro, a un programmatore/team di sviluppo tocca modificare il proprio progetto, magari per poter differenziare gli installer (o tutto l'applicativo!) per lavorare correttamente anche con la nuova versione...

La speranza è sempre che chi rilascia la nuova versione con cui ti devi andare a cozzare:
  1. Sia abbastanza furbo da fornirti lui degli strumenti per fare uno switch il meno doloroso possibile
  2. Abbia ascoltato un minimo le richieste che son giunte e rigiunte...


A casa Microsoft non sembra andare per niente così, proprio per niente. E qui non parlo dei problemi di compatibilità con Vista ma con Office 2007.
Tenere da conto prima di tutto questo

The VSTO 2005 SE runtime also assures that the applications you’ve built on Office 2003 with VSTO 2005 continue to run with the 2007 Office system. This means that any development that you do against Office 2003 will continue to work as you upgrade to the 2007 Office system. Because we recognize that many developers and ISVs build for multiple platform environments, the new application-level add-in functionality will be offered down-level for Office 2003 as a part of VSTO 2005 SE.


Questa era la bellissima pubblicità offerta da VSTO Second Edition: vai tranquillo, utilizza questo e il tuo plugin VSTO per Office 2003, funzionerà senza problemi anche in Office 2007.
Visto che poi non riuscivo ad aprire la solution con VSTO normale, la pubblicità sembrava buona...e quindi son passato a VSTO SE.

Ho provato a cercare fra i miei vecchi post se avevo scritto qualcosa a proposito di uno (dei tanti) problemi di realizzazione del setup, ma non mi sembra...strano!.
Già con le prime versioni del plugin, anche prima di VSTO, mi si era presentato il problema di riuscire a permettere l'installazione anche a persone con un Limited User Account (ovvero utenti _seri_: solo gli admin possono installare ecc..., gli utenti normali no!): infatti i registri di default per un setup di un addin sono in HKEY_CURRENT_USER: questo significa che un add-in veniva installato SOLO da un admin, e i poveri user ciccia.
La soluzione è sempre esistita: si spostano i registri nello stesso ramo di KEY_LOCAL_MACHINE: in questo modo, in maniera automatica, quando un admin installa l'add-in della macchina, veniva caricato normalmente da un utente senza diritti da amministratore.

Vi era un unico difetto, che piaceva poco: l'add-in non risultava più nella lista dei COM Add-ins di Outlook, proprio per lo scambio della chiavi. Forse può sembrare una sciocchezzuola, ma già vedere il plugin lì dentro indicava che: OK, non carica ma lo vede...vediamo di risolvere il problema! Non vedendolo, alcuni utenti mi misero in dubbio che non funzionava...

Sta di fatto che passando alla SE, mi son dimenticato di spostare i registri e quindi son fioccate le richieste: "Qua che son LUA non funziona, come faccio?"...prima di spostare i registri, mi son messo a guardare se qualcosa fosse migliorato (povero stolto!)

Questo problema era stato segnalato da tempo anche sul forum VSTO, e credo che in molti stessero aspettando una soluzione che fosse migliore (alcuni suppongono che potrebbe essere risolto per la terza versione di VSTO...)...peccato che però, nel frattempo, con Office 2007 le strade hanno preso una strada veramente brutta per i piccoli programmatori.
Office 2007 infatti, per motivi che si possono leggere nell'intervento di Andrew in questo topic , Office 2007 caricherà solo add-in che hanno i registri corretti, cioè in HKCU.
Questo proprio per evitare che un utente comune possa decidere di disabilitare/installare ecc...
Ma come fare per i LUA quindi? La soluzione è descritta qui:

The preferred mechanism is to install the Add-in into HKCU; Group Policy can push your MSI down for every individual in an enterprise-scale solution regardless of system, and the question of whether you should force every user on a given machine to run your add-in comes into play on the smaller scale -- particularly given that they won't necessarily have the ability to uninstall the add-in.



Group Policy, che suppongo si riferisca a questo...
E quindi, come vuole fare un utente di Windows XP, che ha un utente LUA (o una serie di utenti LUA) e un solo utente admin (il root, Microsoft, il root!!) ad installare l'add-in con Office 2007?
Mi sa che si attacca al tram...adesso dopo altri n-mila messaggi, spero di ricevere una risposta/soluzione decente...almeno una spiegazione se si può utilizzare localmente su una sola macchina! (Ma dopo un anno, 4 guide su come realizzare il corretto deployment di un add-in, non potevano dirle subito queste cose)

Qualcuno potrebbe poi dire: ma magari era uno strumento pensato proprio per le aziende...
Stronzate! Io l'ho installato la prima versione da un install cd dell'Imagine Cup, e VSTO SE è LIBERAMENTE SCARICABILE!
Perchè dare false speranze ai piccoli programmatori e utenti? :frown: :cry:

E rinasce come la Fenice!

,


Tra ieri ed oggi fondamentalmente è successo un miracolo.
Nel senso, forse mi son ripreso del tutto dalla batosta di J.B. (maledetto egli sia), grazie a due cose:
  • Oggi Sartori è andato alla grande :D
  • Finalmente son riuscito a mettere in piedi una nuova macchina di sviluppo per RemoteCalendars

Sì, erano diversi mesi che non programmavo e nemmeno rispondevo alle richieste...proprio perchè nel mio portatile "something got broken", and PUFF...non mi apriva più la Solution del progetto :frown:
E' stato per mesi un dramma (uninstall, repair e cose vie...niente, non son servite a niente)...fino a ieri, in cui son riuscito su un altro computer a risistemarmi tutto l'ambiente di lavoro (grandissimo), tant'è che oggi pomeriggio, dopo l'orale, mi son dedicato a una nuova release che risolvesse alcuni bug della precedente.
E' bello tornare ad essere operativi :smile:

Installato nuove XFCE 4.4!

, , ,

Finalmente stabile, c'ho voluto perdere un po' di tempo...XFCE 4.4 e' veramente bello, ed e' dotato di nuove funzionalita' e programmi che lo rendono il miglior Desktop Environment fra quelli leggeri (ovvero al confronto fra Enlightenment o Fluxbox)
Ma eccovi uno screenshot:



Dovrei ricompilare Thunar e Xfdesktop con il supporto a dbus per avere anche le icone stile windows sul computer, ma non ne vedo la necessita': trovo invece veramente utili le icone ridotte dei programmi: doppio click e ripartono, le sposti fra destop, cancelli ecc...
E che dire, il theme Tango spacca di brutto :smile:

Live from Lufthansa...and Linux!!

, ,

Super sborone il servizio gratuito della Lufthansa! Ti connetti gratuitamente ad Internet via wireless!!
Ora son in mezzo al Mediterraneo, diretto verso Israele (tra poco arrivero')...spettacolare...
E mi son connesso con Linux, perche' il Windows Firewall mi dava problemi....bah!
Comunque...sborone!! Son in chat con un mucchio di gente a dirlo, via Gmail e Gaim :D :D :D :yes::hat:
Buone vacanze anche a voi...edevviva Lufthansa!!

E finalmente é andata...

,

Sabato scorso consegnai John Black...a molti descrissi cosí la scena:

Mi son sentito come se mi fossi buttato da un aereo in fiamme, senza paracadute...dietro lui, John Black, a cavallo di Nazgul che mi insegue, mentre da sotto arrivava John Black a bordo di un caccia imperiale...salvarmi é puro culo!


Oggi, dopo l'esame di Natali (grassissima) ho finalmente avuto il coraggio di aprire Uniwex e controllare...finalmente posso descrivere la scena dopo:

Mi giro verso l'alto, e mentre grido "Tu non puoi....passaaaaare!" casto Luce, e acceco il Nazgul che cade a terra...quindi, mi giro, estraggo la spada Laser blu e la lancio contro il caccia imperiale, il quale comincia a fare scintille e cade al suolo...grazie alle aquile, infine, riesco ad arrivare a terra sano e salvo...ma per quanto? Dinanzi a me si apre il Cancello Nero...


E tutto questo per un 26 allo scritto :D

E, ohi, vi scrivo dal nuovo Opera, che funziona da dio con il mio plugin per IE, IE4RC :D :D :D

Son qui...aggiornamenti vari!

, ,

É stato un periodo duro questo...professori malati, e un ciclo triste (grazie al cielo gli esami stanno andando bene :D)...mi son molto rattristito poi, perché qualcosa é andato storto nel mio computer...e non riesco piú a sviluppare il mio plugin per Outlook :cry: ... cioé, per farvi capire: mi da un errore stranissimo che non mi apre la solution VSTO...ma non é un errore del mio plugin: mi succede con qualunque progetto VSTO, che crei nuovo o che scarichi direttamente dai siti ufficiali della Microsoft...il mio sospetto é che degli aggiornamenti di Windows (altro non feci, perché a quel tempo non utilizzavo il computer quasi) mi abbiano letteralmente fottuto qualcosa...
In un certo modo, fa da disintossicamento...ma é anche triste: tante richieste che non riusciró piú a soddisfare...
In questi giorni, quindi, per rilassarmi, ho quindi sviluppato in maniera estesa l'altro plugin, IE4RC, l'estensione di Internet Explorer per RemoteCalendars e Outlook: son riuscito a fare un paio di cosette che mi rendono felice :D :
  1. Beh, le guide Microsoft per i plugin per Internet Explorer fanno abbastanza scaiz...ma anche l'idea dietro non funziona un granché: solo qualche tempo fa mi son accorto che i link "coperti da un'immagine" (ovvero nella forma)
    <a href="url"><img src="img" /></a>

    Non venivano correttamente riconosciuti...ho dovuto giocare un pochino con il registry e con Javascript, e quindi é uscita la versione 1.1 che sistemava tutto :smile:
  2. Finalmente ho aggiunto il supporto webcal! Ovvero, adesso basta cliccare direttamente sull'url di tipo webcal://, e l'iCalendar verrá direttamente registrato...
    Ma la cosa figa é che questo funziona con una piccolissima modifica anche Firefox!! :D...Pensavo anche in Opera, ma c'é qualcosa di sistemare...chi mi aiuta?


Passiamo a parlare a bit di politica...la manifestazione di Roma...parliamo da un punto di vista obiettivo: a cosa é servita realmente? La sinistra non cade per un qualcosa del genere (chi manifesta in piazza non si lascia impressionare dalla piazza), e ció che io vorrei di piú dal centro-destra son attivitá serie, sociali, tali da far capire alle persone che sul territorio loro ci son veramente, e che non son fantasmi...politici che si fanno vedere solo al momento del tuo voto!
C'é da dire che l'unica cosa buona che ha portato questa manifestazione é l'isolamento di Casinilamerda. Eh sí, colui che ambisce a sostituire Berlusconi ora é veramente solo: Mastella non si dimette, e ha giá ricevuto degli aut-aut dall'interno del partito per le cose che ha detto (Giovanardi ++, non l'avrei mai detto, ma é stato schietto e sincero: solo il congresso dell'UDC potrá decidere se usciremo dalla Casa delle Libertá, non Casini). Casini é il politico piú pericoloso che Berlusconi potrebbe avere come alleato: vorrebbe sostituirlo, e secondo me, se potesse, entrerebbe direttamente in questo governo a fare l'amicicico con Mastella...
Ottima quindi l'isoluzione (mi attendo l'ennesima spaccatura democristiana all'interno dell'UDC).

E...dal punto di vista soggettivo?
La manifestazione l'ho vista solo in TV...ma é stata bellissima ed impressionante (fantastica la bandiera israeliana che sventolava davanti a Fini :D, e Bossi é un grande: un ictus, ma spara ancora battute!)...la mia speranza é che Berlusconi abbia finalmente capito: la politica italiana non puó ruotare solo attorno a lui, alla sua persona, ma é ora che Forza Italia diventi un partito del popolo, un qualcosa che faccia sentire alla gente un'identitá, e che sia presente quando ce ne é bisogno.
Devo dire che mi ha fatto venire voglia di votare Forza Italia (anche se Fini parla sempre meglio di lui :D :yes:)

Un segno del successo o di quanto é strano questo mondo?

Beh...ieri ci son rimasto cosí :eyes: .
Nel senso, so che il mio plugin un pochino é apprezzato...io faccio di tutto per migliorarlo/aggiungergli features/adattarlo all'esigenze dell'utenza...
Peró questo non me lo sarei mai aspettato:

https://sourceforge.net/tracker/index.php?func=detail&aid=1595127&group_id=144247&atid=758190

[ 1595127 ] Linux Support


make the software for more systems



Sinceramente, mi ha colpito, anche se é una richiesta esageratissima (mi ha spiegato che vorrebbe un plug-in universale...lé dura :right: :left: )...di certo, direi, é un segnale di apprezzamento del mio lavoro in maniera particolare :D

É finalmente nato il mio plugin per Internet Explorer!

,

Ebben sí: dopo il parziale di Toth, avendo giá aggiornato a Internet Explorer 7, mi son buttato nella creazione del plugin per Internet Explorer che potesse avviare Outlook, e quindi attivare immediatamente il prompt per la sottoscrizione di un calendario remoto.
Alla fine, ho scoperto che esistono diversi modi per creare un plugin per IE! Io all'inizio pensavo che si dovesse per forza fare un'interfaccia COM-.NET (un po' come il plugin per Outlook), e quindi ero giá preoccupato...
E invece no! Alla fine é bastato aggiungere una entry al registro di Windows (esiste una chiave che indica le estensioni per i menu di IE), e mi son ritrovato comodamente giá il mio plugin registrato!
Whoahh!
A dire il vero, il processo é tutto meno che banale, dovendo purtroppo basarci su guide vecchie di anni, in cui viene spiegato come creare la nuova voce del menu ma non come associarle un evento!! Ho dovuto cercare un po' in Internet, ma alla fine ho trovato: nella chiave di (Default) del registry deve essere associato il nome di un file, che é quello che viene eseguito quando si clicca sulla voce del menu...l'esempio che ho trovato io era quasi perfetto: associ un file html, che al suo interno contiene solo del codice javascript. Questo si preoccupa di lanciare un programma...et voilá, il gioco é fatto.
Purtroppo c'ho messo un po' di tempo (il setup creato da Visual Studio per esempio mi faceva settare le variabili come numeri decimali, ma il registry giustamente li vuole esadecimali...ho dovuto usare un altro metodo di javascript per lanciare il programma...)...ma alla fine é andata!
Eccolo qui, the Internet Explorer Extension per RemoteCalendars...e l'ho anche inoltrata al sito dei plugin per Internet Explorer 7 (non é un granché, ma non rinuncio a una competizione per 2500 $ :D )...
Alla fine, in questo modo aggiungo ad IE e Microsoft un piccolo desiderio che avevo...renderli piú simili al MacOSx. In quel sistema infatti, basta cliccare su un iCalendar che il programma iCal te lo sottoscrive (uhmmm...ma non é un po' troppo integrato quasi? P: )... Sotto Windows questo é quasi impossibile da fare secondo me, quindi almeno ho aggiunto qualcosa di simile: tasto destro, clicchi sul mio menu e sei pronto per sottsoscrivere il tuo iCalendar in Outlook 2003 grazie a RemoteCalendars...non male direi :smile:
Ecco qui un'immagine:



Ora penso a come fare il plugin per Firefox e Opera :D ...

Una nota aggiuntiva...ehi gruppo di DnD! La prossima volta vi porteró qualcosa di...gustoso :wink:
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31