Errore 5123 nella creazione di un nuovo db con Microsoft Sql server 2012 Express

La causa non me la chiedo ma nella creazione di un nuovo database incorro nell'errore 5123 e precisamente:

"CREATE FILE encountered operating system error 5(Accesso negato.) while attempting to open or create the physical file ...
CREATE DATABASE failed. Some file names listed could not be created. Check related errors. (Microsoft SQL Server, Error: 5123)"

Confrontando due installazioni di SQL Server 2012 Express, noto che sono "spariti" i permessi dell'utente MSSQL$SQLEXPRESS sulla cartella C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQ !!!

Apro allora la scheda "Sicurezza" della cartella MSSQ ed aggiungo l'utente

NT SERVICE\MSSQL$SQLEXPRESS

assegnandogli permessi full con sostituzione delle autorizzazioni sugli oggetti figlio.

Tutto funziona.

Adobe Suite CS6: problema con Adobe Acrobat X Pro

Misteriosamente ed improvissamente non è possibile più aprire Adobe Acrobat X Pro!

Disinstallo tutta la suite e finalmente Acrobat X Pro funziona; ma dinuovo dopo circa 1 mese mi si ripresenta lo stesso problema!

Cercando e chiedendo aiuto sui forum di Adobe scopro che per risolvere il problema è sufficiente disattivare e poi attivare successivamente la suite.

Ad esempio si può aprire Photoshop, cliccare su Aiuto e poi su "disattiva". Chiudere Photoshop e quindi riaprirlo e riattivare la Suite. Semplice no ?!?

Ok, il problema è risolto ... ma è mai possibile che si deve buttare via ore e ore di lavoro per risolvere problemi non nostri per far funzionare software che costato fior fior di quattrini?

Ma ...

Problema charset UTF-8 con pagine .aspx e User Control

Nel mio ultimo progetto web mi sono scontrato in un fastidioso problema di codifica di caratteri che mi impediva di visualizzare correttamente alcuni tipi di caratteri come ad esempio le lettere accentate ecc...
E' da sottolineare che ogni pagina aspx riportata nel head il riferimento al corretto charset mediante la direttiva:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Ho risolto in un primo momento il problema inserendo nel web.config l'elemento:
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" fileEncoding="UTF-8" responseHeaderEncoding="UTF-8" />
Purtroppo però la soluzione di cui sopra non funzionava negli User Control!
Dopo diversi tentati e ricerche su internet, escludendo ogni possibilità, ho provato a risalvare le pagine e gli user control utilizzando il charset UTF-8.
Bingo! Era questo il problema, le pagine erano salvate con un charset errato.
Pertanto se si dovesse riscontrare problemi di codifica di caratteri con pagine .aspx o User Control, tentate la seguente soluzione:
  1. Aprire la pagina con Visual Studio
  2. Dal menù File, fare click su "Salva con Nome"
  3. Cliccare sulla freccia posta sul tasto Salva e poi su "Salva con codifica ..."
  4. Scegliere  UNICODE (UTF-8 con firma digitale)

Problema di cache in Safari iOS 5/6

window.onunload = function(){}

Sviluppando una web app responsive mi sono scontrato su di un problema di cache in safari su iOS5/6 che mi ha fatto perdere molto tempo.

In pratica tutte le funzioni javascript che dovevano essere eliminati nel passaggio ad un'altra pagina permanevano nella cache di Safari e puntualmente ricomparivano alla pressione del tasto di navigazione back.

Ho quindi pensato di scaricare le funzioni all'interno di

 

window.onunload = function(){}

 

ma purtroppo ho sperimentato che l'evento onunload non veniva eseguito!

Dopo diverse ore di ricerca e lavoro ho risolto il problema scaricando le funzioni nell'evento

 

window.onpopstate=function ()

L'evento popstate viene infatti eseguito ogni volta che cambia la cronologia di navigazione della finestra attiva. 

Windows: modifica "esterna" del registro di sistema (da una seconda installazione di Windows)

Può essere utile sapere che è possibile modificare i registri di sistema di Windows da un'altra installazione di Windows esguita su di un differente HD.

Ipotizziamo quindi di possedere un primo sistema operativo installato su di un determinato disco rigido. identifichiamo questa installazione con OLD. Colleghiamo tale HD ad un secondo sistema operativo, che per semplicità indichiamo con NEW, installato quindi su di un differente HD.

AL command prompt di NEW eseguiamo i seguenti comandi:

 

reg load hklm\Old_System F:\Windows\System32\Config\System
reg load hklm\Old_Software F:\Windows\System32\Config\Software

 

in cui F: è il nome dell'unità in cui è installato OLD.

Eseguendo quindi il comando regedit al cmd di NEW sarà possibile editare i registri del sistema operativo OLD.

E' poi anche possibile "caricare" le impostazioni personali di un utente presente sul sistema operativo OLD. E' infatti sufficiente eseguire al cmd il seguente comando:

 

reg load hku\Old_User F:\Users\Pippo\ntuser.dat

 

dove Pippo è l'utente presente sul sistema OLD.

Per scaricare tutte le impostazioni di OLD dal sistema NEW, eseguire i seguenti comandi:

 

reg unload hklm\Old_System
reg unload hklm\Old_Software
reg unload hku\Old-User

 

L'account Administrator in WINDOWS 8

E' bene sapere che utilizzando l'account built-in "Administrator" in Windows 8:

  • non sarai in grado di eseguira alcuna Metro Apps compresa la Store app;
  • l'account Administrator è esclusivamente un account locale e non può essere cambiato in un account Microsoft.

 

Drive Vaccine: escludere una partizione dal restore

Drive Vaccine è un validissimo software di ripristino del PC pensato per proteggere i computer utilizzati da molti utenti garantendo un accesso ed un controllo del PC senza limiti ma ripristinandoli alla configurazione "base" al riavvio o alla disconnessione dell'utente. Per ulteriori informazioni consiglio di visitare il sito http://www.drivevaccine.com/

Una delle funzionalità più interessanti riguarda la possibilità di escludere dal processo di restore una partizione del PC: ciò può risultare estremamente utile per salvaguardare i propri files che altrimenti andrebbero persi. Tecnicamente tale processo viene indicato nel manulae del software come la creazion di un "exemption drive"

Tuttavia il manuale non indica esattamente come fare per creare un "exemption drive".

Per far ciò è necessario prima scaricare il software dal sito http://www.drivevaccine.com/ decomprimendo l'archivio.

Si deve quindi PRIMA creare un file di setup lanciando il file eseguibile situato nella cartella Drive Vaccine PC Restore Plus\Support.

La procedura guidata porterà alla creazione di un file che andrà salvato come setup.cfg nella cartella "Drive Vaccine PC Restore Plus".

Infine si deve eseguire il file Autorun.exe di Drive Vaccine situato nella root della cartella decompressa scegliendo l'opzione "ADVANCED".

E' da sottolineare come l'installazione offra la possibilità di salvaguardare tutte le impstazioni collegate all'account locale come la cartella "My document, Desktop " ecc... inserendole nell' "exemption drive" creato.

Menu verticale multi livello con jQuery (Multi Level slide accordion menu with jQuery)

In questo post discuterò dell'utilizzo "concreto" di uno dei puù citati menù accordion jQuery, descritto in molti articoli come ad esempio:
Da subito ci si renderà conto dell'impossibilità di utilizzare facilmente il menù in un sito web. Infatti il menù presenta 2 problemi: il primo è che non è possibile cambiare il valore di href negli item che possiedono sotto livelli ed il secondo è che anche cambiando il valore di href negli item figli, l'evento onclick su tali livelli sarà interdetto.
Per spiegarmi meglio, consideriamo la struttura originale:
<ul class="topnav">
	<li><a href="#" target="scriptbreaker">Home</a></li>
	<li><a href="#">JavaScript</a>
		<ul>
			 <li><a href="#">Cookies</a></li>
			 <li><a href="#">Events</a></li>
				<ul>
					<li><a href="#">CSS</a></li>
					<li><a href="#">JavaScript</a></li>
				</ul>
			</li>
			 <li><a href="#">Tabs</a></li>
		</ul>
	</li>
	<li><a href="#">Tutorials</a>
		<ul>
			 <li class="active"><a href="#">HTML</a></li>
			 <li><a href="#">CSS</a></li>
			 <li><a href="#">Java</a>
				<ul>
					<li><a href="#">JSP</a></li>
					<li><a href="#">JSF</a></li>
				</ul>
			</li>
			 <li><a href="#">Tabs</a></li>
		</ul>
	</li>
	<li><a href="#" target="_blank">Contact</a></li>
	<li><a href="#">Upload script</a></li>
</ul>
 Analizzando il file scriptbreaker-multiple-accordion-1.js necessario per il funzionamento del menù si osserva che affinché l'effetto accordion funzioni si deve lasciare inalterato il valore di href (href='#') negli item che possiedo sotto item mentre è possibile cambiare il valore di href negli altri item. Ad esempio:
<ul class="topnav">
	<li><a href="pagina1.html" target="scriptbreaker">Home</a></li>
	<li><a href="#">JavaScript</a>
		<ul>
			 <li><a href="pagina2.html">Cookies</a></li>
			 <li><a href="#">Events</a></li>
				<ul>
					<li><a href="pagina3.html">CSS</a></li>
					<li><a href="pagina4.html">JavaScript</a></li>
				</ul>
			</li>
			 <li><a href="pagina5.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="#">Tutorials</a>
		<ul>
			 <li class="active"><a href="pagina6.html">HTML</a></li>
			 <li><a href="pagina7.html">CSS</a></li>
			 <li><a href="#">Java</a>
				<ul>
					<li><a href="pagina8.html">JSP</a></li>
					<li><a href="pagina9.html">JSF</a></li>
				</ul>
			</li>
			 <li><a href="pagina10.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="pagina11.html" target="_blank">Contact</a></li>
	<li><a href="pagina12.html">Upload script</a></li>
</ul>
Se si effettua la modifica sopra riportata si osserverà che dopo aver cliccato su una voce di menù principale per espandere le sotto voci, i link sulle sotto voci non funzionano più!
Il problema è dovuto al file scriptbreaker-multiple-accordion-1.js ed in particolare alla seguente funzione:
if($(this).find("a:first-child").attr('href') == "#"){
 				    $(this).click(function () {
 				        return false;
                    });
 		  		}
che evita lo spostamento ad inizio pagina quando un item principale, con href="#", viene premuto. E' quindi necessario cancellare o commentare la seguente funzione ed assegnare all'evento onclick in valore "return false" direttamente nelle voci principali. Quindi:
<ul class="topnav">
	<li><a href="pagina1.html" target="scriptbreaker">Home</a></li>
	<li><a href="#" onclick='return false;'>JavaScript</a>
		<ul>
			 <li><a href="pagina2.html">Cookies</a></li>
			 <li onclick='return false;'><a href="#">Events</a></li>
				<ul>
					<li><a href="pagina3.html">CSS</a></li>
					<li><a href="pagina4.html">JavaScript</a></li>
				</ul>
			</li>
			 <li><a href="pagina5.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="#" onclick='return false;'>Tutorials</a>
		<ul>
			 <li class="active"><a href="pagina6.html">HTML</a></li>
			 <li><a href="pagina7.html">CSS</a></li>
			 <li onclick='return false;'><a href="#">Java</a>
				<ul>
					<li><a href="pagina8.html">JSP</a></li>
					<li><a href="pagina9.html">JSF</a></li>
				</ul>
			</li>
			 <li><a href="pagina10.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="pagina11.html" target="_blank">Contact</a></li>
	<li><a href="pagina12.html">Upload script</a></li>
</ul>
Riguardo invece il primo problema riscontrato, ovvero l'impossibilità di rendere attivi gli item con sotto item, ovvero gli item con valore href="#", una possibile soluzione è quella di duplicare la voce come sottovoce. Pertanto:
<ul class="topnav">
	<li><a href="pagina1.html" target="scriptbreaker">Home</a></li>
	<li><a href="#" onclick='return false;'>JavaScript</a>
		<ul>
			<li><a href="pagina13.html">JavaScript</a></li>
			 <li><a href="pagina2.html">Cookies</a></li>
			 <li onclick='return false;'><a href="#">Events</a></li>
				<ul>
					<li><a href="pagina14.html">Events</a></li>
					<li><a href="pagina3.html">CSS</a></li>
					<li><a href="pagina4.html">JavaScript</a></li>
				</ul>
			</li>
			 <li><a href="pagina5.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="#" onclick='return false;'>Tutorials</a>
		<ul>
			<li><a href="pagina15.html">Tutorials</a></li>
			 <li class="active"><a href="pagina6.html">HTML</a></li>
			 <li><a href="pagina7.html">CSS</a></li>
			 <li onclick='return false;'><a href="#">Java</a>
				<ul>
					<li><a href="pagina16.html">Java</a></li>
					<li><a href="pagina8.html">JSP</a></li>
					<li><a href="pagina9.html">JSF</a></li>
				</ul>
			</li>
			 <li><a href="pagina10.html">Tabs</a></li>
		</ul>
	</li>
	<li><a href="pagina11.html" target="_blank">Contact</a></li>
	<li><a href="pagina12.html">Upload script</a></li>
</ul>
 

Page.ResolveUrl in head runat="server"

Per utilizzare il metodo Page.ResolveUrl all'interno del tag head con l'attributo runat="server", è sufficiente utilizzare il simbolo # al posto dell' =, come di seguito riportato:
<head runat="server">
<link rel="stylesheet" type="text/css" href="<%#ResolveUrl("~/script/somefile.css")%>" />
</head>
e richiamando Page.Header.DataBind() nella Sub Page_Load()
Public Sub page_load()
        Page.Header.DataBind()
End Sub

ASP.NET Routing e Authorization

Ho utilizzato il routing asp.net per la gestione delle lingue in un sito web registrando nell'Application_Start del Global.asax:
routes.Add("en", New Route("en/{*path}", New GlobalizationRouteHandler(CultureInfo.GetCultureInfo("en"))))
routes.Add("it", New Route("it/{*path}", New GlobalizationRouteHandler(CultureInfo.GetCultureInfo("it-IT"))))
In questo modo una pagina in lingua inglese viene riscritta come http://www.miosito.com/it/pagina.aspx ed un pagina in lingua inglese come http://www.miosito.com/en/pagina.aspx.
Il problema di questa tecnica nasce nel momento in cui alcune pagine appartengono a direttori il cui accesso è limitato dall' "access rules" standard, aggiungendo quindi al direttorio un file web.config simile al seguente che permette l'accesso al solo ruolo "Admin":
<configuration>
    <system.web>
        <authorization>
            <allow roles="Admin" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>
Pertanto l'url http://www.miosito.com/direttorio/pagina.aspx viene reindirizzato alla pagina di login a meno che l'utente non sia identificato ed appartenente al ruolo Admin.
Se però l'indirizzo diventa http://www.miosito.com/it/direttorio/pagina.aspx, ovvero l'indirizzo riscritto dal routing, la limitazione imposta nel web.config sembra non funzionare ed è possibile accedere alla pagina protetta!
Per prevenire questo fenomeno è sufficiente aggiungere al web.config principale del sito:
<location path="it/direttorio">
        <system.web>
            <authorization>
                <allow roles="Admin"/>
                <deny users="*" />
            </authorization>
        </system.web>
    </location>

    <location path="en/direttorio">
        <system.web>
            <authorization>
                <allow roles="Admin"/>
                <deny users="*" />
            </authorization>
        </system.web>
    </location>