dilema si cine mai crede in critica literara

Mircea Vasilescu accentueaza faptul ca “o parte din <<treburile noastre interne>> s-au mutat la Bruxelles” (cote de lapte, taxe de autostrada, taxe de inmatriculare…). Iar parerea mea e ca e de bine.

Liviu Avram, citat din Cotidianul,20 martie, despre demisiile Mona Musca si Claudiu Saftoiu :”Cele doua demisii asaza o stacheta cu care vom putea, pe viitor, sa facem mai usor diferenta dintre oameni de onoare si nesimtiti” – ati auzit de vreo demisie pe timpul lui Nastase?

Articolul “China: O lege capitalista” merita citat integral –  este despre legea protejarii proprietatii private ,pe picior de egalitate cu cea publica.Oricum, un citat relevant:”Modernizarea Chinei, controlata de comunisti, nu e scutita de crize, e scutita doar de expunerea lor.”

Horia Marinescu, despre “Iminenta decadere a mall-ului“,se preocupa si de Corso:
“Oraşul, în vest, dar, în special, la început de secol XX, avea un
Corso: vezi pozele din anii ’30 cu Calea Victoriei între „Capşa“ şi
Palatul Telefoanelor – strada era plină ochi. Lumea trecea, se saluta.”
Pentru mine, Corso in Bucuresti este intre Romana si Universitatii… Acolo ies, in fiecare iarna, cind se aprind luminile…Inainte de a avea copii mergeam si duminica…. dar timpul nu mai imi permite

Programarea in .NET – partea a 14-a Salvare XML si Executare de operatii asincrone in Windows Forms

De ce taskuri asincrone ? In ideea ca , intr-o aplicatie
Windows(si chiar ASP.NET) , operatiile lungi ar trebui sa fie executate de
catre alt thread, urmind ca aplicatia sa poata sa mai afiseze ceva
utilizatorulu in tot acest timp ( fie si un buton pe care scrie „apasa ca sa
intrerupi operatia asta lunga …”). De pilda, in aplicatia noastra, daca avem
mai mult de 100 de Publisher-i si vrem sa ii vedem pe toti – ar trebui
incarcati intr-un nou thread.

 

Ne ocupam mai intii de o aplicatie Windows Forms si pe urma
de ASP.NET

Un thread nu e greu de pornit. Hai sa vedem un exemplu:

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(StartAction));

           
t.Start(“obiect transmis”);

 

 

public void
StartAction(object o)

        {

            string
s = o.ToString();

            System.Threading.Thread.Sleep(5000);

            //executa
actiunea

            //trimite
text

            if
(this.InvokeRequired)

            {

                this.Invoke((MethodInvoker)delegate()

                 {

                     this.Text = s;

                 });

                //sau

                //this.Invoke(new MethodInvoker(evenimentfaraparametri());

                //this.Invoke(new EventHandler(btnDiscounts_Click));

                //this.BeginInvoke(new EventHandler(eveniment cu
parametri));

            }

            else

                this.Text = s;

        }

 

 

Totusi,
exista o problema – dintr-un thread nu se pot accesa DIRECT controale din alt
thread – si de aceea avem instructiunea this. Invoke .Diferenta intre this.Invoke si este this.BeginInvoke aceea ca prima instructiune asteapta rezultatul
actiunii, pe cind a doua doar executa si se intoarce imediat sa execute codul
ramas.

 

De
aceea exista controlul numit BackgroundWorker – care asigura ca , din
evenimentul propriu generat, sa accesezi orice obiect de pe forma. O sa facem
acest lucru pentru salvarea in XML a colectiei de Publisher-i in format XML.

.NET
are o forma usoara de a salva o colectie/clasa in format XML , salvindu-i
proprietatile.

Vom
utiliza modalitatea cea  mai usoara de a
face acest lucru

Marcam
clasa Publisher si clasa colectie ColPublisher cu atributul de   [Serializable]
:

 

[Serializable]

    public
class ColPublisher
: System.Collections.ObjectModel.KeyedCollection<string,Publisher>

 

[Serializable]

    public
class Publisher

 

Acum
o sa facem serializarea obiectului Publisher:

#region Serializer

        /// <summary>

        /// instanta pentru lazy load

        /// </summary>

        private
static XmlSerializer m_Serializer;

        /// <summary>

        /// serializator pentru obiectul publisher

        /// </summary>

        private
static XmlSerializer Serializer

        {

            get

            {

                if (m_Serializer == null)

                    m_Serializer = new XmlSerializer(typeof(Publisher));

 

                return m_Serializer;

            }

        }

 

        /// <summary>

        /// salveaza obiectul ca XML

        /// </summary>

        [XmlIgnore]

        public
string XML

        {

            get

            {

                StringBuilder sb = new
StringBuilder();

                EncodingStringWriter sw = new
EncodingStringWriter(sb, Encoding.Default);

                XmlTextWriter xtw = new XmlTextWriter(sw);

               
Serializer.Serialize(xtw, this);

                return sb.ToString();

 

 

            }

        }

        /// <summary>

        /// recreeeaza un Publisher dintr-un string XML

        /// </summary>

        /// <param
name=”XML”>
string care contine
tot
</param>

        /// <returns></returns>

        public
static Publisher
FromXML(string XML)

        {

            StringReader sr = new StringReader(XML);

            return
Serializer.Deserialize(sr) as Publisher;

        }

        #endregion

 

 

   

Copiem
apoi acelasi cod( cu citeva diferente) si pentru ColPublisher

 

Citeva
comentarii despre cod:

De ce am pus [XmlIgnore] peste  public string XML ? Pentru a nu serializa
si aceasta proprietate, dind astfel nastere la o nedorita recursivitate

Ce e cu clasa EncodingStringWriter
? Este facuta pentru a putea schimba Encoding=ul- daca aveti de exemplu
caractere speciale(diacritice) romanesti/franceze/etc.

De ce metoda FromXML este statica- iar XML este pe
instanta? Asa mi se pare normal – transformarea dintr-un obiect in XML sa
apartina obiectului, iar din XML in obiect nu poate sa apartina unui obiect(
ah, daca as fi putut scrie this = Serializer.Deserialize(sr) as Publisher  !) – ci doar clasei.

Nu se poate face codul mai „generic”? Ba da- una din
deosebiri ar fi ca FromXML ar trebui sa fie pe instanta…

 

 

Haideti acum in proiectul Windows sa serializam o colectie
de Publisher-i.Pe forma frmPublisherList adaugam un buton btnSave, cu textul
Save, dublu click si scriem urmatorul cod:

private void
btnSave_Click(object sender, EventArgs e)

        {

            BookObjects.ColPublisher col =
colPublisherBindingSource.DataSource as
BookObjects.ColPublisher;

            string
strSave = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);

            strSave = Path.Combine(strSave, “pub.xml”);

            File.WriteAllText(strSave,
col.XML);

            System.Diagnostics.Process.Start(strSave);

        }

 

 

Rulati
proiectul, adaugati 2 publisher-i si apasati pe save.

Este
clar ca, daca sunt multi publisher-i, procesul poate deveni prea lung si
blocheaza interfata.

 

Haideti
sa folosim background worker. Il adaugam din toolbox , il redenumim bgSave,
dublu click. Luam codul din btnSave_Click, il adaugam la
si pe urma scriem doar bgSave.RunWorkerAsync();

 

private void
btnSave_Click(object sender, EventArgs e)

        {

            bgSave.RunWorkerAsync();

        }

 

        private
void bgSave_DoWork(object
sender, DoWorkEventArgs e)

        {

            BookObjects.ColPublisher col =
colPublisherBindingSource.DataSource as
BookObjects.ColPublisher;

            string
strSave = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);

            strSave = Path.Combine(strSave, “pub.xml”);

            File.WriteAllText(strSave,
col.XML);

            System.Diagnostics.Process.Start(strSave);

 

        }

 

Data
viitoare  o sa vorbim despre modelul
asincron din ASP.NET.

Microsoft Listed as Most Secure OS

Saptamina trecuta , in Catavencu, Dragos iar zicea de faptul ca virusii Windows nu merg pe Linux. Nici nu e nevoie -au propriile lor probleme.Nu am cautat in mod special,dar am citit azi despre Microsoft Listed as Most Secure OS 

Aici gasiti un rezumat al studiului Symantec in care se arata ca timpul de raspuns al MS e mai rapid decit al RedHat(21 zile fata de 58).
Ca sa nu fac ca Dragos, trebuie mentionat ca numarul de probleme a fost mai mare la MS decit la RedHat pe probleme mari, dar mai bine pe probleme medii

Si, cum e normal, probleme provin de la aplicatiile Web incorporate:

Alfred
Huger, vice president of engineering for Symantec Security Center, said
the real problem is with Web applications, where two-thirds of all
vulnerabilities are found.

Avantajele Dataset/DataTable

Am descoperit, cu uimire, virtutile Dataset si DataTable. Sunt extraordinare pentru proiecte one-shot!

Am avut de facut o integrare intre SQL SERVER, MySQL si ORACLE(date care trebuiau verificate, mapate, schimbate, vazut diferente, grupate, etc)

Dataset-ul s-a dovedit a fi unealta perfecta pentru join-uri intre tabele, pentru filtrari si altele.

Admiratia mea pentru OO a mai scazut un pic – pentru ca – chiar si cu CodeSmith – tot era destul de greu de scris asa ceva.

 

Tutorial .NET – p13 – Log-area operaţiilor cu log4net

In orice aplicaţie este bine sa ţinem evidenta
operaţiilor făcute de utilizator( ce a modificat sau chiar ce a văzut). In
acest scop putem folosi fie mecanismul de trace din .net,  fie o soluţie proprie, fie
Logging and Instrumentation Application Block(http://msdn2.microsoft.com/en-us/library/ms998162.aspx), fie log4net(http://logging.apache.org/log4net/

 

Vom utiliza in acest exemplu log4net .El
suporta log-area operaţiilor in felurite moduri – in fişier, baza de date,
email, telnet si multe altele.

Downloadati versiunea 1.2.10 de la adresa http://logging.apache.org/log4net/downloads.html
si sa începem configurarea aplicaţiei. Copiaţi conţinutul folder-ului log4net-1.2.10\bin\net\2.0\debug
in C:\Book\sharedDll si sa începem modificarea proiectului Windows pentru a înregistra
ce a făcut utilizatorul

 

Deschidem Book.sln si deschidem App.Config.
Acolo scriem următoarele imediat sub configuration:

  <configSections>

    <section name=“log4net“ type=“log4net.Config.Log4NetConfigurationSectionHandler,
log4net
“/>

  </configSections>

  <log4net>

    <appender name=“RollingLogFileAppender“ type=“log4net.Appender.RollingFileAppender“>

      <File value=“Log4Net.log“/>

      <AppendToFile value=“true“/>

      <rollingStyle value=“Composite“/>

      <maximumFileSize value=“1MB“/>

      <maxSizeRollBackups value=“10“/>

      <datePattern value=“yyyyMMdd“/>

      <layout type=“log4net.Layout.PatternLayout“>

        <param name=“ConversionPattern“ value=“%d [%t] %-5p %c %m%n“/>

      </layout>

    </appender>

    <root>

      <level value=“Debug“/>

      <appender-ref ref=“RollingLogFileAppender“/>

    </root>

  </log4net>

 

 

După cum se vede, folosim RollingLogFileAppender
( adică un fişier a cărui denumire va fi diferita in fiecare zi după
modelul
datePattern ) de tipul Composite(daca depaseste  maximumFileSize atunci se creează un nou fişier
in ziua respectiva).

 

Sa adăugam referinţa proiectului nostru
(BookWin) dll-ul log4net.dll din sharedDll .Avem de făcut următoarele in
Program.cs :

In funcţia Main scriem prima linie:

log4net.Config.XmlConfigurator.Configure();

apoi adăugam următorul membru in clasa Program:

public static readonly
log4net.ILog logger = log4net.LogManager.GetLogger(“RollingLogFileAppender”);

 

Haide sa scriem in fişier de cite ori un utilizator
adaugă un nou Publisher.

In frmPublisherAdd.cs, la evenimentul private void
btnAdd_Click(object sender, EventArgs e)
vom adăuga codul
de log-are:

if (Program.logger.IsDebugEnabled)

                Program.logger.Debug(“Adaugat publisher cu numele:” +
p.Name);

 

Cam atit e de făcut. Acum rulaţi proiectul, adaugaţi
un Publisher, si o sa vedeţi un fişier log4Net.log in care scrie următoarele:

 

<data> [1] DEBUG RollingLogFileAppender
Adaugat publisher cu numele:newpub

 

 

E interesant la log4Net ca puteţi adăuga mai mulţi
appender-i, astfel ca , de pilda, sa trimită si email de cate ori o modificare
e făcuta.

 Observatie 1:

Pentru aplicatia Web, modificarile in Web.Config sunt aceleasi – iar in global.asax trebuie pusa linia urmatoare:

 void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup      
        log4net.Config.XmlConfigurator.Configure();   
    }

Observatie 2:

In loc sa punem codul in fiecare pagina de Web si Windowspe salvare, mai bine punem in fiecare cod de “salvare” al obiectelor- de pilda in public void Save()

Lectura obligatorie: documentaţia de
log4net…

 

dilema veche si frontierele europei

Pe pagina 2 , doua scrisori de la scriitori- despre medici din RO care asteapta peschesul(mascat intr-o fundatie) si o doctorita din Canada- care a riscat(si a pierdut) incercind sa salveze un copil….

Mircea Vasilescu reia ideea sefului in “Democratia de gasca”: “[…] inca nu avem o democratie adevarata, bazata pe institutii solide si functionale. Avem o democratie de gasca, in care totul depinde de <<ce vrea sefu>>.Si avem si sefi care nu stiu exact ce vor, dar se detesta unii pe altii. Si asta li se pare o <<baza>> suficienta pentru a lua decizii”

Pe pagina a 10-a, Philippe Walter are un articol, super scris, despre cele 4 zone europene rivale:”spatiul Danubian, spatiul Baltic, spatiul Atlantic si cel Euro-Mediteraneean” + cea spatiul Eurasiatic pe care incearca sa il faca Rusia …

Blogovest Zlatanov vorbeste despre Europa la trecut si despre Bulgaria la prezent:
“Adevaratul nume al barbariei din Bulgaria este saracia economica a celei mai mari parti a populatiei, chinul existential al multor grupuri[…], coruptia totala a institutiilor de stat, simbioza dintre politicieni si mafia care domina toate segmentele societatii noastre. Europa occidentala le-a strins pe toate la piept si are de gind sa le finanteze cu darnicie din fonduri europeene”
Suna cunoscut???

Pe pagina 13, o reclama pe 1/2 de pagina, goala, doar in jos scrie: www.thegroup.ro
Ma dau in vint dupa denumiri de site-uri .ro care sunt in engleza(fara sa fie filiale ale unui grup mai mare international)… la fel e la ei pe site :
3/4 in engleza si 1/4 in RO (partea de news….).

Radu Cosasu este in extaz dupa cuvintul pupincurism…

Iulian Comanescu are un articol (care ma face invidios ca nu l-am gindit/scris )despre Web 2.0- de la ce a pornit si unde va ajunge

Si mi-a placut tare mult , la “Divan”, ce a spus Andrei Plesu : “Am invitat la NEC un sociolog german, care, in curriculum, si-a trecut si posturile pe care le-a refuzat”

Si apropo de sondajul privitor la starea xenofobiei in Ungaria: 59% s-au declarat hotarat impotriva pirezilor. Voi sunteti pro sau contra lor?

cotidianul – interpret de maladii

O culegere de povestiri bine scrisa – si ispititoare pentru aceia care
sunt dispusis a creada ca si o viata obisnuita are farmecul ei. Se
apropie la un moment dat de Camus -“Strainul”.
Totusi, la indieni se pare ca nevasta e la rang de accesoriu – si, in
afara de Twinkle, nici nu e vazuta ca avind vointa proprie(iar cu
Twinkle sotul are o problema din cauza asta…)
Ca de obicei, ultima parte din ultima povestire dezvaluie subiectul:
“Totusi, sunt momente in care ma simt tulburat de fiecare kilometru pe
care l-am parcurs, de fiecare masa pe care am luat-o, de fiecare
persoana pe care am cunoscut-o, de fiecare camera in care am dormit.
Oricat de obisnuite ar parea lucrurile astea, exista momente cand mi se
par ireale”

Acelasi lucru il declara Ray Bradbury in povestirea Imaginati-va,
facind comparatie intre povestile cu zine si lumea actuala(oameni pe un
bulgare de pamint care se invirte in jurul unui bulgare de foc- ce vi
se pare mai fantastic?)- dar mai pe scurt

Merita citita – pentru a vedea ca peste tot problemele (de iubire, de
adaptare, de viata) sunt cam aceleasi – desi forma pe care le imbraca e
diferita

citate din ziare despre secretul unor meserii

Cotidianul, despre “Viorel Panaite, chirurgul companiilor”-e vorba de un job in care se ofera consultanta companiilor cum sa isi pastreze si sa isi motiveze angajatii.Iata un fragment relevant despre ceea ce presupune meseria lui- si “gura pacatosului…”
<Intrebare Cotidianul>”Un an intreg dureaza implementarea ideii de schimbare in mintea unui manager?”
<Raspuns VP>:”Da, pentru ca trebuie sa aiba si dorinta si bani. Eu trebuie sa am multe prinzuri, cu zimbete multe, astfel incit acesta sa fie de acord ca prin solutia propusa aduc <<un plus de valoare>> in care merita sa investeasca”

    Cred ca vreau si eu job-ul asta- de zimbit zimbesc….

Istodor, de la Catavencu, ia un interviu mai degraba cuminte(la cit poate fi el de afurisit) lui Dan Paul, presedintele Asociatiei Brokerilor :
<DP> “Cind se aude ca se pierde la Bursa e fals. E azi o valoare mai mica a actiunilor, bun, dar nu inseamna ca banii aia s-au topit, nu-i mai gasim. Un investitor care nu a vindut nu a pierdut”

Mda-daca am bagat 1.000.000 RON in actiuni si ele acum fac 1 RON, pot sa mai gasesc diferenta undeva? Si, daca o gasesc, o pot recupera?
Stiu acum de ce s-a intimplat Marea Criza din America – nu au avut un DP care sa le explice ca nu se poate pierde la Bursa…