October 2007 - Posts
Quando è uscita la nuova versione di Live Search Maps, mi è capitata una cosa strana: ogni volta che mi collegavo all'indirizzo live.maps.com, il browser veniva reindirizzato all'indirizzo intl.local.live.com, ossia Live Local Search, per cui niente mappe.
Ho googlato un po', ma non sono riuscito a trovare nessuna soluzione, a parte che è un problema che non capita a tutti (qualcuno vede tranquillamente le mappe) e che può succedere a prescindere dal browser[1].
Mi sono ricordato che avevo avuto più o meno lo stesso problema nello scaricare Windows Live Writer. Anche in quel caso si veniva reindirizzati ad un'altra pagina, in cui non c'era traccia di Windows Live Writer, perciò si doveva ricorrere al link diretto per effettuare il download.
Allora pensai si trattasse di un problema di localizzazione e con un espediente riuscii a vedere il sito originale. Anche in questo caso ho provato ad usare lo stesso metodo ed ha funzionato.
Riepilogo i semplici passaggi, validi sia per Internet Explorer che per Firefox:
- impostare come prima lingua del browser l'inglese, o meglio en-US
per farlo in IE dal menu Strumenti->Opzioni Internet, nella scheda Generale cliccare su Lingue
per farlo con Firefox, dal menu Strumenti->Opzioni, nella scheda Avanzate cliccare su Scegli nel riquadro lingue

- eliminare la cache del browser
in IE Strumenti->Opzioni Internet e cliccare su Elimina nella sezione Cronologia esplorazioni
in Firefox Strumenti->Elimina dati personali - riavviare il browser (non sono sicuro che sia necessario, ma io ho fatto così)
Con questo espediente non si viene più reindirizzati e finalmente appaiono le mappe, perciò ne deduco che il problema sia legato alla localizzazione. Non riesco a spiegarmi, però, come mai ripristinando l'italiano come prima lingua, Live Search Maps continua a funzionare.
E non capisco neanche perché il team di Windows Live abbia adottato questo strano metodo. Mi sembra normale, infatti, che per le versioni beta non ci sia la versione localizzata in italiano. Non mi sembra molto furbo, invece, che mi si dirotti verso un altro servizio in mancanza di una versione localizzata.
[1] In un forum qualcuno ha ipotizzato che, visto che a lui con Firefox non andava e con IE sì, la Microsoft lo avesse fatto apposta per svantaggiare Firefox (della serie zappa sui piedi...), smentito però da un altro nella situazione opposta (con Firefox andava, mentre con IE no, veniva reindirizzato). Ci mancava solo il solito consiglio di disinstallare Vista... (in compenso ho trovato quello di usare Google Maps). Per quanto mi riguarda, venivo reindirizzato sia con IE che con Firefox (par condicio quindi

).
View blog reactions
La notizia del giorno ha giustamente scatenato un putiferio, per chi volesse alcuni spunti di discussione, oltre a quelli citati nel mio precedente post, può leggere qui, o qui o qui o ancora qui.
E in più si aggiunge anche la notizia della ratifica del costosissimo fallimento di Italia.it
Che ne dite di raccogliere l'idea lanciata da Andrea Boschin, il cui post condivido in pieno (ma poi ho visto anche da Beppe Grillo) e mandare tutti una mail a levi_r@camera.it (promotore della legge)? Che ne so, magari è in buona fede e non si rende conto di cosa sta combinando, avvisiamolo 
AGGIORNAMENTO:
mentre cominciano i primi dissensi ufficiali verso questa proposta (vedi questo post, segnalato da qui), vi segnalo questa petizione online (segnalata qui).
Io ho già firmato, ed ho pure messo il banner in questo blog, fermiamola finché siamo in tempo.
Technorati Tags:
burocrazia,
web,
legge View blog reactions
Stamattina ho letto questa notizia e le prime reazioni.
Che dire, sono sconcertato, l'Italia è forse l'unico paese in cui registrare un dominio è un'operazione burocratica e lenta (si usa ancora il fax), adesso si vogliono pure peggiorare le cose.
Posso capire l'esigenza di evitare che il web possa essere usato con disinvoltura come mezzo di diffamazione, ma non comprendo la necessità di introdurre iscrizioni, bolli e quindi burocrazia e costi.
Spero solo di sbagliarmi e che questa legge non tocchi siti amatoriali e blog personali, come ha affermato qualcuno degli ideatori di questa che per ora è solo una proposta.
Però non mi è chiaro come si stabilisce quando un sito è amatoriale e quando no. Ad esempio questa e altre community come potrebbero essere classificate?
E poi dopo aver visto partorire, non molto tempo fa, la Legge Urbani, a mio parere indecente scritta male[1], sono molto scettico sulla capacità di legiferare in un campo che evidentemente non è molto conosciuto da chi se ne vorrebbe occupare, o forse viene proprio temuto, per la libertà che offre questo mezzo di comunicazione.
Temo, insomma, che ci aspetti un altro obbrobrio.
[1] anche soltanto limitandosi agli aspetti tecnici, tanto è vero che per certi versi non è applicata in quanto inapplicabile (vedi
qui), mentre dov'è stata applicata, come la tassa sulle memorie, ossia HD, CD, DVD, ecc., (e meno male che quello era il governo di meno tasse per tutti) viene puntualmente
elusa con conseguenze assurde.
Technorati Tags:
burocrazia,
web,
legge View blog reactions
Segnalo questo post su Coding Horror, che vale sempre la pena leggere, da cui si arriva a Branching and Merging Primer, in cui si elencano una serie di pattern di branching (per release, code-promotion, per task, per component, per tecnologia) nonché di anti-pattern di merging e branching (se siamo in uno di questi casi, allora qualcosa non va):
- Merge Paranoia—avoiding merging at all cost, usually because of a fear of the consequences.
- Merge Mania—spending too much time merging software assets instead of developing them.
- Big Bang Merge—deferring branch merging to the end of the development effort and attempting to merge all branches simultaneously.
- Never-Ending Merge—continuous merging activity because there is always more to merge.
- Wrong-Way Merge—merging a software asset version with an earlier version.
- Branch Mania—creating many branches for no apparent reason.
- Cascading Branches—branching but never merging back to the main line.
- Mysterious Branches—branching for no apparent reason.
- Temporary Branches—branching for changing reasons, so the branch becomes a permanent temporary workspace.
- Volatile Branches—branching with unstable software assets shared by other branches or merged into another branch.
Note Branches are volatile most of the time while they exist as independent branches. That is the point of having them. The difference is that you should not share or merge branches while they are in an unstable state. - Development Freeze—stopping all development activities while branching, merging, and building new base lines.
- Berlin Wall—using branches to divide the development team members, instead of dividing the work they are performing.
Technorati Tags:
branching View blog reactions
Ogni volta che lavoro ad un'applicazione web ho il problema di dover modificare alcune righe del file web.config per gestire alcune situazioni ricorrenti.
Di solito, infatti, devo modificare le connection string, impostare il debug a false o a true nella sezione compilation(ma anche la voce debug o i customerrors) a seconda che stia sviluppando il sito dal pc in azienda o dal notebook connesso mediante VPN, oppure che lo debba provare sul server locale, o per pubblicarlo on line.
Il tutto è complicato dal fatto che potrei non essere l'unico a lavorare su quel progetto e che comunque lavoro in un ambiente con source control (Subversion nel mio caso).
In questo post di Scott Guthrie viene spiegata una soluzione molto comoda a questo problema, sfruttando le configurazioni di build della soluzione e del progetto e gli eventi di pre-build. La procedura dettagliata, che è descritta nei particolari in questo post di Scott Hanselman, può essere riassunta nei seguenti passi:
- È essenziale che si parta da un progetto di tipo ASP.NET web application, per poter sfruttare gli eventi di pre-build, che non sono disponibili quando si sceglie "Nuovo sito web".
- In configuration manager, accessibile dalla barra degli strumenti standard (vedi figura a lato), aggiungiamo le nuove configurazioni, oltre a quelle di default (Debug e Release);
nel creare le nuove configurazioni, bisogna stare attenti a crearle sia per la soluzione che per il progetto; si può partire indifferentemente da uno dei due e mettere una spunta alla richiesta di creare una nuova configurazione anche per l'altro. - Per ciascuna configurazione creiamo un file web.config (magari copiandolo da quello esistente) e chiamiamolo web.config.nomeConfigurazione, ad esempio web.config.debug, ecc.;
personalizziamo quindi ciascuno dei file a seconda della configurazione, ad esempio cambiandone la connection string.
A questo punto abbiamo impostato diverse configurazioni per la soluzione e per il progetto e per ciascuna di esse abbiamo un diverso file di configurazione web.config
Dobbiamo solo aggiungere un evento di pre-build che si occupi di sovrascrivere automaticamente al file web.config la versione specifica della configurazione impostata.
Per evitare di sovrascrivere comunque il file web.config[1], possiamo utilizzare un file batch che effettui la copia solo nel caso in cui riscontra delle differenze tra il web.config e le impostazioni legate alla configurazione.
Ad esempio, salviamo nella root del progetto un file chiamato copyifdifferent.bat, con le seguenti istruzioni:
@echo off
echo Confronto il file %1 con il file %2
if not exist %1 goto File1NotFound
if not exist %2 goto File2NotFound
fc %1 %2
if %ERRORLEVEL%==0 GOTO NoCopy
echo I file sono differenti. Copio %1 su %2.
copy %1 %2 /y & goto END
:NoCopy
echo I file sono uguali. Non effettuo la copia.
goto END
:File1NotFound
echo Il file %1 non esiste. Impossibile effettuare la copia.
goto END
:File2NotFound
echo Il file %2 non esiste. Copio %1.
copy %1 %2 /y
goto END
:END
echo Fine.
A questo punto non resta che impostare un evento di pre-build. Visualizziamo la finestra proprietà del progetto (tasto destro sul progetto e poi proprietà) e in questa scegliamo la scheda "compile" e quindi in basso il tasto "build events".
Nella finestra che compare, scriviamo nello spazio per la command line dell'evento di pre-build:
"$(ProjectDir)copyifdifferent.bat" "$(ProjectDir)web.config.$(ConfigurationName)" "$(ProjectDir)web.config"
Adesso basterà scegliere la configurazione voluta e Visual Studio modificherà, se necessario, il file web.config con le impostazioni specifiche.
Fonti:
[1] Ogni volta che si modifica il file web.config (e quindi anche se lo si sovrascrive con un file identico), tutti i designer e gli AppDomain avviati che guardano ad esso vengono fatti ripartire.
View blog reactions
Sto usando sempre più spesso i controlli dell'AJAX Control Toolkit, anche se non senza qualche problema: sono carini e comodi, ma anche ben forniti di bug.
Poco tempo fa ho scoperto un comportamento strano del controllo Tabs dell'AJAX Control Toolkit quando usato insieme a una mappa Virtual Earth.
Il codice utilizzato era il seguente:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="TabsSample.aspx.vb"
Inherits="TabsSample" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit"
TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Tabs e mappe</title>
<script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=5"
type="text/javascript"></script>
<script type="text/javascript">
<!--
function GetMappa() {
map = new VEMap('divMappa');
map.SetDashboardSize(VEDashboardSize.Small);
map.LoadMap(new VELatLong(40.8224663105625, 16.4207463591201), 16,
'h', false, VEMapMode.Mode2D, false);
map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);
var pp = new VEShape(VEShapeType.Pushpin, map.GetCenter());
pp.SetTitle("Sede Webis");
pp.SetDescription("<a href='http://www.webis.it' target='_blank'
title='WEBIS'><img src='http://www.webis.it/images/logomappa.png'
alt='WEBIS'></a><p>La sede di <a href='http://www.webis.it'
target='_blank' title='WEBIS'>Webis</a>");
map.AddShape(pp);
}
//-->
</script>
</head>
<body onload="GetMappa()">
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<cc1:TabContainer iD="TC1" runat="server" ActiveTabIndex="0">
<cc1:TabPanel runat="server" ID="TP1">
<HeaderTemplate>
Mappa
</HeaderTemplate>
<ContentTemplate>
<div id="divMappa"
style="position: relative; width: 400px; height: 300px;">
</div>
</ContentTemplate>
</cc1:TabPanel>
<cc1:TabPanel runat="server" ID="TP2">
<HeaderTemplate>
Altro
</HeaderTemplate>
<ContentTemplate>
<p>Bla bla bla</p>
</ContentTemplate>
</cc1:TabPanel>
</cc1:TabContainer>
</div>
</form>
</body>
</html>
Il risultato è che il centro della mappa risulta spostato in alto a sinistra, e la mappa è fuori dalla visibilità. In pratica quello che si vede nei due screenshot, a sinistra come appare la mappa con il codice riportato, a destra invece come dovrebbe apparire.
Dopo vani smanettamenti sul DOM e CSS e dopo aver verificato che quasi casualmente talvolta la mappa veniva visualizzata correttamente, ho cercato un po' in rete e lì ho trovato che altri avevano riscontrato lo stesso problema utilizzando le mappe di Google, ma con una differenza: questo strano comportamento avveniva solo se la mappa non era presente nel primo tab container, ma in uno dei successivi.
Ho verificato che la stessa cosa avveniva pure nel mio caso, e secondo me potrebbe non trattarsi di un vero e proprio bug, ma di una incompatibilità congenita del codice javascript necessario a costruire la mappa con quello necessario a gestire i tabs. La mappa viene fuori "sballata" poiché viene costruita all'interno di un container che ha larghezza zero, per cui qualcosa va storto. Pertanto anche quando si passa a visualizzare il tab con la mappa, restituendogli una larghezza effettiva con javascript, questa non viene visualizzata correttamente.
Ma perché allora nel mio caso il problema si presentava anche nel caso in cui la mappa fosse inserita nel primo tab?
Be' per risolvere il tutto è bastato eliminare dal codice ActiveTabIndex="0" lasciando che si attivasse da solo il primo tab per default (e questo mi sembra proprio un bug).
Con questo workaround ho risolto il problema, rimane però il fatto che per poter inserire delle mappe all'interno di un controllo Tabs si è costretti ad utilizzare solo il primo.
View blog reactions
Ho inserito il controllo Tabs dell'AJAX Control Toolkit in un sito web ed avevo la necessità di personalizzarne l'aspetto per adeguarlo alla grafica del sito.
Le spiegazioni fornite sul sito live dell'AJAX Control Toolkit sono alquanto scarne, perciò anche dopo aver smanettato un bel po' coi fogli di stile, non ero ancora riuscito a combinare niente di decente.
Ho cominciato a cercare in giro, ma le ricerche fatte sul forum ufficiale e in rete mi portavano sempre ad un link ormai inesistente
, nel quale, come dicevano tutti, c'era la soluzione ai miei problemi.
Solo dopo un bel po' di giri sono finalmente arrivato a questa pagina.
Qui Ron Buckton chiarisce anzitutto che questo post riproduce l'articolo originale non più disponibile in rete (quello misteriosamente scomparso
).
L'articolo vero e proprio, quindi, spiega dettagliatamente come modificare attraverso classi CSS gli elementi dei controlli Calendar e Tabs, riportandone per intero le classi di default.
Per tutti i particolari: Skinning model for Calendar and Tabs in Ajax Control Toolkit
View blog reactions
Non scrivo da moltissimo tempo, avrei anche dei post mezzi pronti, ma sono davvero impegnatissimo tra famiglia e lavoro praticamente da luglio (ferie a parte).
C'è chi sta evidentemente peggio di me: le poste (italiane?).
A maggio, infatti, ho vinto il 10 premio di Community Credit.
In realtà l'orologio da polso che avevo vinto non era più disponibile, per cui l'hanno sostituito con quello da muro in foto ed hanno spedito il premio il 9 luglio avvisandomi per e-mail che mi sarebe arrivato entro 6-8 giorni lavorativi.
Be', mi è arrivato il 20 settembre scorso: possibile che tra il 9 luglio ed il 20 settembre ci siano solo 8 giorni lavorativi nei paesi che ha dovuto attraversare? (visti i tempi, non posso credere che sia arrivato in Italia direttamente dagli USA).
(Ingrandendo la foto sotto si può vedere come il pacco sia stato effettivamente inviato a luglio e mi sia stato recapitato il 20 settembre, tra l'altro non subito ma con un avviso nella cassetta nonostante l'ufficio fosse aperto!)

A presto (spero
)
View blog reactions