mercoledì 21 dicembre 2011

How To: View proxy credentials o Window 7

Ecco una di quelle cose completamente out-of-topic che torna sempre utile.

Da buon "Consulente" ho un trascorso di varie credenziali salvate sul mio Pc, il problema e che Windows 7 non sempre riesce a comprendere quali utilizzare per connettersi e come utilizzarle e quando utilizzarle... e soprattutto perchè.

Per quanto riguarda i vari browser ogniuno si salva le sue ( Eccetto IE ), ma immancabilmente il vostro buon sistema operativo farà di tutto per salvarsi anche quelle relative ai proxy.

Solo che se cambia il proxy... o vi scade la password windows che cosa fa ? semplice crea una nuova entry e poi cerca di gestirla al meglio. Ancora una volta mi domando che cosa possa voler dire AL MEGLIO.

Andiamo a cercare tutte le nostre credenziale.

Start > Control Panel > User Account
Avvio > Pannello di controllo > Account Utente


Vi apparirà il pannello riportante le informazioni relative al vostro utente,
a questo punto selezionate la voce:
"Manage my network passwords"
"Gestione delle credenziali"

Vi troverete quindi un pannello con tutto l'elenco delle vostre credenziali... per me è stato bello rivedere credenziali di 2 anni fa o reti di amici e tanto altro ancora.. PER ALTRO le password sono mostrate con gli asterischi.

Bene per me è stato più o meno semplice, ho rimosso tutto quello che non mi serve.

Spero come sempre nell'utilità del post!

venerdì 16 dicembre 2011

How To: auto reference Class

Ed è proprio mentre cercavo di ottimizzare la mia soluzione alla sfida che mi imbatto in questa circostanza.

Onestamente ho sempre usato oggetti che referenziano se stessi ma non mi ero mai avventurato nello scrivere un codice di prova.

class b
{
public string n { get; set; }
public string v { get; set; }
public b[] c { get; set; }
}

class Program {
static void Main(string[] a)
{
b z = new b();
z.n = "Root";
z.v = "---";

b z1 = new b();
z1.n = "Child";
z1.v = "---";

b z2 = new b();
z2.n = "Child";
z2.v = "---";

z.c = new b[] { z1, z2 };
}
}


In questo esempio la classe b referenzia se stessa in forma d'array... chiaramente chi partecipa alla sfida troverà interessante questa classe... ma credo anche gli altri.

Saluti

lunedì 12 dicembre 2011

C# Sfida XML Viewer

E visto che vi è piaciuto si parte subito con questa nuova sfida, e vediamo come va.
Questa volta le regole sono ferree...

a) leggere un file xml
a.1) questo potrà contenere commenti.
a.2) questo potrà contenere [cdata[STRING]].
a.3) questo dovrà per forza rispettare le aperture e le chiusure dei tag.
a.4) questo potrà contenere sia nodi semplici che complessi.
a.5) il file non deve essere inferente o generare inferenza.

b) pubblicare i dati
b.1) il risultato dovrà essere mostrato in una o più griglie o liste.
b.2) il risultato non dovrà essere editabile.
b.3) il risultato non dovrà essere nuovamente salvato.

c) l'host dei dati ( il contenitore )
c.1) deve essere un form.
c.2) non può utilizzare dataTable.
c.3) non può utilizzare librerie esterne o di terze parti.
c.4) non può utilizzare propertyGrid.
c.5) non può utilizzare oggetti o controlli di terze parti.
c.6) può essere una soluzione console o windows application.
c.7) deve esistere almeno una seconda classe oltre al main.

d) il linguaggio
d.1) si può utilizzare C# o VB ( non XAML )
d.2) non si può utilizzare WPF

File XML di esempio ..
------------------------------------------------------------------------------

16.12.2011 Fabio Arosio
Dato che mi è stato richiesto pubblico anche un xml d'esempio.


<?xml version="1.0" encoding="UTF-8"?>
<utenti>
<utente>
<nome>Fabio</nome>
<cognome>Arosio</cognome>
<professione>Team Leader</professione>
<indirizzi>
<casa> piazza g.cesare</casa>
<ufficio> vicolo stretto</ufficio>
</indirizzi>
</utente>
<utente>
<nome>Claudio</nome>
<cognome>Eridani</cognome>
<professione>Sviluppatore Senior</professione>
<indirizzi>
<casa>stazione nord</casa>
<ufficio>via verdi</ufficio>
</indirizzi>
</utente>
<utente>
<nome>Nudru</nome>
<cognome>Bufu</cognome>
<professione>Divinita</professione>
<indirizzi>
<casa>piazza della vittoria</casa>
<ufficio>viale dei giardini</ufficio>
</indirizzi>
</utente>
</utenti>


------------------------------------------------------------------------------

16.12.2011 Fabio Arosio
760 Byte.. fatto finito e funzionante !!



Ma per il momento non pubblico il codice.. !!

Ora chi propone di meno !!


------------------------------------------------------------------------------

03.01.2011 Fabio Arosio
1120 Byte

Posto che il primo utilizzasse una treeView ho dovuto rivedere qualcosa... nel senso che questo sicuramente è corretto ...



e questo è il file..

giovedì 1 dicembre 2011

How To: SQL Server JSON parser

Ed eccomi ancora qui a pensare a qualcosa come sempre fuori dagli schemi... ammetto questa volta la cosa è stata decisamente complessa. Ma ha dato un risultato davvero inatteso.

Per una necessità mi serve passare un array ad una stored procedure, tuttavia non mi è possibile determinare a priori i campi, presenti nell'array... diciamo anche che il fantastico mondo dei varchar, mi ha menato una zappa sul malleolo.

Quindi ho pensato a json ( anche se questa versione è un po stravolto ) ma molto sta nella convenzione che utilizzerò per scriverlo.

/* 
    Questo mi rappresenta il parametro iniziale
        indicativamente
        sono la
        - definizione del parametro
        - il suo valore
*/
DECLARE @jMasterText AS VARCHAR(max)
SET @jMasterText = '{{d:01/01/2010,v:-,t:5007.79}|
{d:01/01/2011,v:5080.84,t:5132.98}|
{d:01/01/2012,v:5180.84,t:5432.98}}'

/*
    Per prima cosa è necessario
        spezzare i campi sapendo che
        [a:x,b:y,c:z]
        dove
        a è il nome del 1 campo
        x è il valore del 1 campo
        i : separano i campi da i valori
        i | separano i recodr
*/

DECLARE @iTime as int

SET @iTime = 0

WHILE (charindex('|',@jMasterText)>0 )
BEGIN

DECLARE @jText AS VARCHAR(max)

SET @jText = ltrim(rtrim(Substring(@jMasterText,1,Charindex('|',@jMasterText)-1)))
SET @jMasterText = Substring(@jMasterText,Charindex('|',@jMasterText)+1,len(@jMasterText))

DECLARE @jTempText AS VARCHAR(MAX)
DECLARE @jField AS VARCHAR(MAX)
DECLARE @jValue AS VARCHAR(MAX)

DECLARE @jValueList AS VARCHAR(MAX)
DECLARE @jFieldListD AS VARCHAR(MAX)
DECLARE @jFieldList AS VARCHAR(MAX)

SET @jTempText = @jText

SET @jTempText = replace(@jTempText,'{','')
SET @jTempText = replace(@jTempText,'}','')

SET @jFieldListD = ''
SET @jFieldList = ''
SET @jValueList = ''

/* ciclo per l'estazione degli elementi */

WHILE (charindex(',',@jTempText)>0 )
BEGIN
SET @jField = ltrim(rtrim(Substring(@jTempText,1,Charindex(',',@jTempText)-1)))
SET @jTempText = Substring(@jTempText,Charindex(',',@jTempText)+1,len(@jTempText))

SET @jValue = ltrim(rtrim(Substring(@jField,Charindex(':',@jField)+1,len(@jField))))
SET @jField = ltrim(rtrim(Substring(@jField,1,Charindex(':',@jField)-1)))

SET @jFieldListD = @jFieldListD + ',' + @jField +' varchar (max) '
SET @jFieldList = @jFieldList + ',' + @jField
SET @jValueList = @jValueList + ',*' + @jValue +'*'
END

/*
        rimane l'ultimo campo da elaborare
    */

SET @jField = ltrim(rtrim(Substring(@jTempText,1,len(@jTempText))))

SET @jValue = ltrim(rtrim(Substring(@jField,Charindex(':',@jField)+1,len(@jField))))
SET @jField = ltrim(rtrim(Substring(@jField,1,Charindex(':',@jField)-1)))

SET @jFieldListD = @jFieldListD + ',' + @jField +' varchar (max) '
SET @jFieldList = @jFieldList + ',' + @jField
SET @jValueList = @jValueList + ',*' + @jValue +'*'

/*
        in questo punto abbiamo l'elenco
        completo dei campi
    */

SET @jFieldListD =Substring(@jFieldListD,2,len(@jFieldListD))
SET @jFieldList =Substring(@jFieldList,2,len(@jFieldList))
SET @jValueList =Substring(@jValueList,2,len(@jValueList))

SET @jValueList =replace(@jValueList,'*','''')

/*
        Questa è la definizione della sintassi
            sql che dovrò creare per poi effettuare
            la selezione
    */

DECLARE @jResultCreate AS VARCHAR(max)
DECLARE @jResultInsert AS VARCHAR(max)

IF @iTime = 0
BEGIN
SET @jResultCreate = 'CREATE TABLE ##tbJResult ('+ @jFieldListD +')'
EXEC(@jResultCreate)
SET @iTime = 1
END


SET @jResultInsert = 'INSERT INTO ##tbJResult (' + @jFieldList+ ') VALUES (' + @jValueList+ ')'
EXEC(@jResultInsert)

END

/*
    rimane l'ultimo elemento da elaborare
*/
SET @jText = ltrim(rtrim(Substring(@jMasterText,1,len(@jMasterText))))

SET @jTempText = @jText

SET @jTempText = replace(@jTempText,'{','')
SET @jTempText = replace(@jTempText,'}','')

SET @jFieldListD = ''
SET @jFieldList = ''
SET @jValueList = ''

WHILE (charindex(',',@jTempText)>0 )
BEGIN
SET @jField = ltrim(rtrim(Substring(@jTempText,1,Charindex(',',@jTempText)-1)))
SET @jTempText = Substring(@jTempText,Charindex(',',@jTempText)+1,len(@jTempText))

SET @jValue = ltrim(rtrim(Substring(@jField,Charindex(':',@jField)+1,len(@jField))))
SET @jField = ltrim(rtrim(Substring(@jField,1,Charindex(':',@jField)-1)))

SET @jFieldListD = @jFieldListD + ',' + @jField +' varchar (max) '
SET @jFieldList = @jFieldList + ',' + @jField
SET @jValueList = @jValueList + ',*' + @jValue +'*'
END

SET @jField = ltrim(rtrim(Substring(@jTempText,1,len(@jTempText))))

SET @jValue = ltrim(rtrim(Substring(@jField,Charindex(':',@jField)+1,len(@jField))))
SET @jField = ltrim(rtrim(Substring(@jField,1,Charindex(':',@jField)-1)))

SET @jFieldListD = @jFieldListD + ',' + @jField +' varchar (max) '
SET @jFieldList = @jFieldList + ',' + @jField
SET @jValueList = @jValueList + ',*' + @jValue +'*'

SET @jFieldListD =Substring(@jFieldListD,2,len(@jFieldListD))
SET @jFieldList =Substring(@jFieldList,2,len(@jFieldList))
SET @jValueList =Substring(@jValueList,2,len(@jValueList))

SET @jValueList =replace(@jValueList,'*','''')

SET @jResultInsert = 'INSERT INTO ##tbJResult (' + @jFieldList+ ') VALUES (' + @jValueList+ ')'
EXEC(@jResultInsert)

SELECT * FROM ##tbJResult
DROP Table ##tbJResult


Qui c'e' tutta la parte di codice che a sua volta è inclusa in una stored molto più considerevole.

Spero che tutto ciò possa essere utile anche per altri .. !

C# Sfida a 250 byte

Ed ecco che prima di natale mi passa per la testa questa malsana idea, ammetto l'originale non è mia, ma è una cosa che mi ha sempre gasato.

La sfida è semplice semplice scrivere un programma in soli "250 byte" ossia il [file.cs] deve essere di 250 byte.

L'applicazione deve :
presentare un form secondo queste specifiche:
->Aprire e leggere e mostrare un file.
->Avere almeno un EventHandler Gestito.
->Non andare in errore.
->Mostrare il testo fisso "POI" ( point of interest )

L'applicazione deve essere in un solo file ( la cui lunghezza massima è di 250 byte )
deve essere compilabile, e naturalmente funzionante.

L'applicazione può usufruire delle librerie standard del framework e non di terze parti.

L'applicazione può essere fatta o in c# o in vb.Net.

L'applicazione deve rendere fruibile il file letto.

Prima di partire c'e' qualcuno che ha altre regole ?

Qui sotto il log e le considerezioni chi tecnicamente sta già partecipando...
Saranno pubblicate sole le versioni che rientreranno nell corrette caratteristiche.

----------------------------------------------------------------------------------
Fabio Arosio

Dopo una prima prova (dove ho limato davvero il limabile) direi che 250 forse sono davvero pochi ... quindi estendiamo almeno a 500 byte.

----------------------------------------------------------------------------------
Fabio Arosio

Raccolta del primo giorno :
- FDI grp 313b versione I ( minimo )

- V.Simone 450b versione II
- A.Fabio 440b versione III
- A.Fabio 413b versione IV

Secondo me i 313b sono davvero irraggiungibili... !

----------------------------------------------------------------------------------
Fabio Arosio

- FDI grp 292b versione II ( nuovo minimo )

Come smentirsi da solo !

----------------------------------------------------------------------------------
Fabio Arosio

- FDI grp 288b versione III ( nuovo minimo )

Sempre più in basso ( ma ora credo di aver proprio toccato il minimo ).


----------------------------------------------------------------------------------
Fabio Arosio

- Zocram15 277 versione I ( nuovo minimo )

E ora ?? chi riuscirà a scendere sotto questo limite ??

----------------------------------------------------------------------------------
Fabio Arosio

- Zocram15 283 versione II ( nuovo minimo )

nella versione precedente ci è stata comunicata la scomparsa del testo "poi" ..


----------------------------------------------------------------------------------
Fabio Arosio

- Zocram15 256 versione III ( nuovo minimo )

E sono sempre più curioso di vedere che cosa cavolo ha scritto in 256 byte...

cmq spedirsi un progetto intero via chat non ha prezzo !!


----------------------------------------------------------------------------------
Fabio Arosio

- A.Fabio 252 versione V ( nuovo minimo ) !! sorry !!
( sono sul filo della legalità ! )

Però funziona... !!

----------------------------------------------------------------------------------
Fabio Arosio

NON HO PAROLE !!!




----------------------------------------------------------------------------------
Fabio Arosio

V.Simone
ATTENTI ATTENTI non so se sia una bomba o una sola 200 byte !!!
RIPETO 200 byte !!
(ERA UNA BOMBA !!! )

----------------------------------------------------------------------------------
Fabio Arosio

C.Tiziano



Sempre meno sempre meno ... !!!


----------------------------------------------------------------------------------
Fabio Arosio

V.Simone



189 ( reali 187 mi sono stati comunicati due \s in più )


----------------------------------------------------------------------------------
Fabio Arosio

Abbiamo anche concorrenti esterni .. pupleDev aka c.Tiziano credo via commento
ha pubblicato anche il sorgente in Vb.Net ...
fissando il tutto a 184 byte !!



----------------------------------------------------------------------------------
Eccoci di nuovo qui ... !!

Fabio Arosio
Completamente fuori conconcorso .. perchè non prevede proprio tutto tutto pubblicherei anche questa versione da 148 byte...

using System;using System.IO;using System.Windows.Forms;class Program{static void Main(string[] a){MessageBox.Show(File.ReadAllText(a[0]),"poi");}}

Legge il file mostra un form l'evento è già gestito dalla messagebox... tuttavia già
so che questa versione non va bene !!!

La sfida rimane ancora open... !!

----------------------------------------------------------------------------------

Con oggi direi che questo capitolo si chiude... pubblicate tutti la vostra versione
come commento e questo punto che la giuria si faccia avanti !

A tutti quelli che hanno partecipato ( e che si sono divertiti nel farlo ) porgo i miei complimenti ( che magari sono poca cosa ) ma è stato davvero splendido!


Fabio!