<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Symbol LABoratory &#187; xml</title>
	<atom:link href="http://lab.symboltech.hu/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://lab.symboltech.hu</link>
	<description>Kreativitás és Innováció a szoftveriparban</description>
	<lastBuildDate>Tue, 03 Jan 2012 14:24:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Egyedi sorosítás &#8211; IXMLSerializable megvalósítás</title>
		<link>http://lab.symboltech.hu/2009/07/egyedi-sorositas-ixmlserializable-megvalositas/</link>
		<comments>http://lab.symboltech.hu/2009/07/egyedi-sorositas-ixmlserializable-megvalositas/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 09:30:14 +0000</pubDate>
		<dc:creator>developerteam</dc:creator>
				<category><![CDATA[Fejlesztői hírek]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[forráskód]]></category>
		<category><![CDATA[ixmlserializable]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[sorosítás]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lab.symboltech.hu/?p=268</guid>
		<description><![CDATA[C#, remek nyelv. Szinte mindent lehet sorosítani, XML-be menteni. Nem is kell kézzel ezeket megírni, összerakni. De egy pár dolog kimaradt. Talán oka is van, hogy miért, de ez nem lényeg. A lényeg, hogy meg lehet valósítani.]]></description>
			<content:encoded><![CDATA[<p><strong>C#, remek nyelv.</strong> Szinte mindent lehet sorosítani, XML-be menteni. Nem is kell kézzel ezeket megírni, összerakni. De egy pár dolog kimaradt. Talán oka is van, hogy miért, de ez nem lényeg. A lényeg, hogy meg lehet valósítani.</p>
<p>A generic List&lt;&gt;-et lehet sorosítani, de előtte kell egy plusz származtatási szinten készíteni. Dictionary&lt;T,U&gt;-t nem lehet. De van megoldás. Csináljunk egy sorosítható Dictionary-t.</p>
<pre>    [XmlRoot("Dictionary")]
    public class SerializableDictionary&lt;TKey, TValue&gt; : IXmlSerializable
    {
        public XmlSchema GetSchema()
        {
            return null;
        }</pre>
<pre>        public void ReadXml(XmlReader reader)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));</pre>
<pre>            bool wasEmpty = reader.IsEmptyElement;</pre>
<pre>            reader.Read();</pre>
<pre>            if (wasEmpty)
                return;</pre>
<pre>            while (reader.NodeType != XmlNodeType.EndElement)
                try
                {
                    reader.ReadStartElement("Item");
                    reader.ReadStartElement("Key");
                    TKey key = (TKey)keySerializer.Deserialize(reader);
                    reader.ReadEndElement();</pre>
<pre>                    reader.ReadStartElement("Value");
                    TValue value = (TValue)valueSerializer.Deserialize(reader);
                    reader.ReadEndElement();</pre>
<pre>                    reader.ReadEndElement();</pre>
<pre>                    reader.MoveToContent();</pre>
<pre>                    this.Add(key, value);
                }
                catch { }
            reader.ReadEndElement();
        }</pre>
<pre>        public void WriteXml(XmlWriter writer)
        {
            XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
            XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));</pre>
<pre>            foreach (TKey key in this.Keys)
            {
                writer.WriteStartElement("Item");
                writer.WriteStartElement("Key");
                keySerializer.Serialize(writer, key);
                writer.WriteEndElement();</pre>
<pre>                writer.WriteStartElement("Value");
                TValue value = this[key];
                valueSerializer.Serialize(writer, value);
                writer.WriteEndElement();</pre>
<pre>                writer.WriteEndElement();
            }
        }
    }</pre>
<p>Ahogy látható, csak a saját szintünket kell megvalósítani, a TKey és TValue elemek sorosításával már a saját osztályuk foglalkozik. Extrém eset ha a TValue is egy sorosítható Dictionary (valós példát nem tudunk jelenleg mondani), ilyenkor ennek az objektumnak a sorosításakor szintén a fenti algoritmus fog lefutni.</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.symboltech.hu/2009/07/egyedi-sorositas-ixmlserializable-megvalositas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Takarítás szoftverkiadás előtt</title>
		<link>http://lab.symboltech.hu/2009/07/takaritas-szoftverkiadas-elott/</link>
		<comments>http://lab.symboltech.hu/2009/07/takaritas-szoftverkiadas-elott/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 07:14:44 +0000</pubDate>
		<dc:creator>developerteam</dc:creator>
				<category><![CDATA[Kikapcsolódás]]></category>
		<category><![CDATA[forráskód]]></category>
		<category><![CDATA[kiadás]]></category>
		<category><![CDATA[lassítás]]></category>
		<category><![CDATA[messagebox]]></category>
		<category><![CDATA[mulasztás]]></category>
		<category><![CDATA[popup]]></category>
		<category><![CDATA[programozó]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[szoftverkiadás]]></category>
		<category><![CDATA[takarítás]]></category>
		<category><![CDATA[tempfile]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lab.symboltech.hu/?p=222</guid>
		<description><![CDATA[Szoftvertermék kiadása előtt mindenképp ajánlott a kódot revizionálni. Több hónapos, több fejlesztővel folyó fejlesztés során számos olyan dolog "marad" a forráskódban, amely nem maradhat benne a kiadás előtt.]]></description>
			<content:encoded><![CDATA[<p>Szoftvertermék kiadása előtt mindenképp ajánlott a kódot revizionálni. Több hónapos, több fejlesztővel folyó fejlesztés során számos olyan dolog &#8220;marad&#8221; a forráskódban, amely nem maradhat benne a kiadás előtt.</p>
<p>Eddigi fejlesztési tapasztalataink alapján összeszedtük, hogy mikkel találkoztunk eddig. Nem titok és nem szégyen, velünk is előfordul, mi is mulasztottunk már:</p>
<p style="text-align: left;"><strong><img class="aligncenter size-medium wp-image-239" title="wrongway" src="http://lab.symboltech.hu/wp-content/uploads/2009/07/wrongway-204x300.jpg" alt="wrongway" width="204" height="300" /></strong></p>
<p style="text-align: left;"><strong>Direkt lassítás.</strong> Nem károkozás, sokkal inkább professzionális munkamódszer, amikor lassabb számítógépet emulálva szándékos lassításokat helyezünk el a kódban. Nem célszerű ezt a kiadott verzióban is benne felejteni.<br />
<em><strong>Megoldás:</strong> #warning pragma használata</em></p>
<p><strong> </strong></p>
<p><strong>Felugró ablakok. </strong>Hibakeresési céllal sok programozó használ felugró ablakokat, sőt &#8211; bár nem illik, de néha az átlagosnál durvább verbális kifejezéseket is. Mivel ezek hibafelderítési célokat szolgálnak, általában ott maradnak benne a kódban, ahol csak alapos tesztelés során talál rá az ember/tesztelő. A végfelhasználónál megjelenő, nem értelmezhető, oda nem illő üzenetek presztízsrombolók.<br />
<em><strong>Megoldás:</strong> Üzenet megjelenítése Debug.WriteLine()-nal.</em></p>
<p><strong> </strong></p>
<p><strong>A bűvös new Random(). </strong>A végfelhasználó nem veszi észre mindig, de számos helyen alkalmazunk véletlen tesztadatokkal való feltöltést. Nem szerencsés, ha a végfelhasználónál történő új vevő rögzítéskor a vevő neve és címe már kitöltésre került tipikusan &#8220;<strong>Kovács Géza</strong>&#8221; és &#8220;<strong>Kiss János</strong>&#8221; nevekkel.<br />
<em><strong>Megoldás:</strong> new Random() konstruktorok megkeresése a forráskódokban.<br />
<strong>Saját tapasztalat:</strong> Nem minden ilyen konstruktor kell, hogy megszűntetésre kerüljön. Legutolsó projektünk a tisztítás után 7 helyen használta a Random konstruktort.</em></p>
<p><strong> </strong></p>
<p><strong>Ideiglenes fájlok írása.</strong> XML vagy bármilyen más adatátvitel implementálása közben gyakran mentjük az átvitt adatokat átmeneti fájlokba. Sok esetben ez a <strong>C:\tempfile.dat</strong>, amely azon kívül, hogy az ügyfél számítógépén furcsán mutat, rendes biztonsági házirendet tartalmazó környezetben (a fájlírás letiltása miatt) IOException-t eredményez.<br />
<em><strong>Megoldás:</strong> if DEBUG direktíva használata fájl írásakor.</em></p>
<p><strong>Takarításra fel!</strong> </p>
<p><img class="alignleft size-medium wp-image-225" title="sweep" src="http://lab.symboltech.hu/wp-content/uploads/2009/07/sweep-300x205.jpg" alt="sweep" width="300" height="205" /> </p>
<p> </p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://lab.symboltech.hu/2009/07/takaritas-szoftverkiadas-elott/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

