<?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>koras.pl - Orest Hrycyna portfolio &#38; blog &#187; c#</title>
	<atom:link href="http://koras.pl/category/projekty/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://koras.pl</link>
	<description></description>
	<lastBuildDate>Sat, 20 Aug 2011 18:00:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Visual Studio 2008 &#8211; Coding Style</title>
		<link>http://koras.pl/2010/11/03/visual-studio-2008-coding-style/</link>
		<comments>http://koras.pl/2010/11/03/visual-studio-2008-coding-style/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 11:26:49 +0000</pubDate>
		<dc:creator>Orest Hrycyna</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[websearch]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://koras.pl/?p=478</guid>
		<description><![CDATA[
Dzisiaj trochę bardziej techniczna notka. Programowanie w kilku narzędziach jednocześnie potrafi być czasem bardzo uciążliwe ze względu na różnice w standardach kodowania. W pracy korzystam z jednego IDE (ang. Integrated Development Environment), na uczelni z innego chociaż staram się jak najwięcej pisać w tym samym co w pracy. W domu natomiast przy pisaniu programu na [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://koras.pl/blog/go.php?http://koras.pl/2010/11/03/visual-studio-…8-coding-style/" title="(7 hits)"><img src="http://koras.pl/blog/wp-content/uploads/2010/11/code_3002.jpg" alt="Visual Studio 2008 - Coding Style" title="Visual Studio 2008 - Coding Style" width="590" height="281" class="centered size-full wp-image-479" /></a></p>
<p>Dzisiaj trochę bardziej techniczna notka. Programowanie w kilku narzędziach jednocześnie potrafi być czasem bardzo uciążliwe ze względu na różnice w <a href="http://koras.pl/blog/go.php?http://pl.wikipedia.org/wiki/Standardy_kodowania" title="(135 hits)">standardach kodowania</a>. W pracy korzystam z jednego <a href="http://koras.pl/blog/go.php?http://pl.wikipedia.org/wiki/Zintegrowane_środowisko_programistyczne" title="(7 hits)">IDE</a> (<em>ang. Integrated Development Environment</em>), na uczelni z innego chociaż staram się jak najwięcej pisać w tym samym co w pracy. W domu natomiast przy pisaniu programu na zaliczenie korzystam z trzeciego już IDE i w dodatku z kolejnego języka programowania.<br />
<span id="more-478"></span><br />
W domu korzystam z Microsoft Visual Studio 2008 i języka C#. Domyślny <a href="http://koras.pl/blog/go.php?http://en.wikipedia.org/wiki/Indent_style" title="(49 hits)">styl kodowania</a> (ang. coding style, indent style) przerażał mnie i powodował, że nie mogłem się odnaleźć w tym kodzie. Przyzwyczajony do zupełnie innego stylu pisania starałem się nadrabiać ręcznymi poprawkami, ale było to bardzo uciążliwe, w dodatku IDE samo z siebie robiło niektóre wcięcia i odstępy. Znalazłem jednak rozwiązanie.</p>
<h3>Tabulatory na spacje</h3>
<p>Visual Studio wszystkie tabulatory automatycznie zamienia na spację. Jest to zupełnie niepotrzebne. Możemy to wyłączyć korzystając z ustawień edytora. Włączamy ustawienia z menu: <em>Tool -> Options</em>, w lewym drzewie wybieramy: <em>Text Editor -> C# -> Tabs</em> i zaznaczamy opcję <strong>Keep Tabs</strong>. Gotowe.</p>
<h3>Wcięcia i odstępy</h3>
<p>Szukając wczoraj rozwiązania problemu, którego nie do końca potrafiłem nazwać natknąłem się na tę oto stronę <a href="http://koras.pl/blog/go.php?http://www.dalsoft.co.uk/blog/index.php/2010/06/04/visual-studio-2010-kr-coding-style-variant/" title="(63 hits)">Visual Studio 2010 – K&#038;R Coding Style Variant</a>. Okazuje się, że styl pisania kodu ma nawet swoją nazwę! I tak jak to jest opisane w artykule &#8211; w Visual Studio mamy styl <a href="http://koras.pl/blog/go.php?http://en.wikipedia.org/wiki/Indent_style#Allman_style_.28bsd_in_Emacs.29" title="(49 hits)">Allmana</a>, a chcielibyśmy mieć <a href="http://koras.pl/blog/go.php?http://en.wikipedia.org/wiki/Indent_style#K.26R_style" title="(49 hits)">K&#038;R</a>. </p>
<h4>Przykłady</h4>
<p><strong>K&#038;R</strong></p>
<pre class="brush: csharp">
		public class ClassName {
			public ClassName() {

			}

			public string MethodName() {
				if (variable1) {
					return "Method1";
				} else {
					return "Method2";
				}
			}
		}
</pre>
<p><strong>Allman</strong></p>
<pre class="brush: csharp">
		public class ClassName
		{
			public ClassName()
			{

			}

			public string MethodName()
			{
				if (variable1)
				{
					return "Method1";
				}
				else
				{
					return "Method2";
				}
			}
		}
</pre>
<p>Co więc robimy? Włączamy ustawienia z menu: <em>Tool -> Options</em>, w lewym drzewie wybieramy: <em>Text Editor -> C# -> Formatting -> New Lines</em> i odznaczamy wszystkie opcje dostępne w folderze <strong>New line options for braces</strong>. To wszystko. Teraz jeżeli chcemy przeformatować stary kod zaznaczamy go, wciskamy Ctrl + E, a następnie F.</p>
<p>Mam nadzieję, że komuś przydadzą się te informacje. Mnie uratowały one od oczopląsu ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://koras.pl/2010/11/03/visual-studio-2008-coding-style/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Obsługa czytnika kart w C#</title>
		<link>http://koras.pl/2010/01/07/obsluga-czytnika-kart-w-c/</link>
		<comments>http://koras.pl/2010/01/07/obsluga-czytnika-kart-w-c/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 00:56:47 +0000</pubDate>
		<dc:creator>Orest Hrycyna</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[studia]]></category>
		<category><![CDATA[smartcard]]></category>

		<guid isPermaLink="false">http://koras.pl/blog/?p=228</guid>
		<description><![CDATA[Poszukiwałem odpowiedniego rozwiązania problemu obsługi czytnika kart w C#, w przeciwieństwie niestety do Javy nie mamy do dyspozycji wbudowanej implementacji tego problemu. Na wielu angielskich stronach i blogach znalazłem jakieś kawałki kodu, nawet jakiś framework, ale niestety nic tak do końca nie chciało działać. W końcu z tego wszystkiego udało mi się uzyskać kawałek kodu, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://koras.pl/blog/go.php?http://koras.pl/blog/2010/01/07/obsluga-czytnika-kart-w-c/" title="(145 hits)"><img src="http://koras.pl/blog/wp-content/uploads/2010/01/smartcard.gif" alt="Obsługa czytnika kart w C#" title="Obsługa czytnika kart w C#" width="240" height="124" class="alignleft size-full wp-image-229" align="left" /></a>Poszukiwałem odpowiedniego rozwiązania problemu obsługi czytnika kart w C#, w przeciwieństwie niestety do Javy nie mamy do dyspozycji wbudowanej implementacji tego problemu. Na wielu angielskich stronach i blogach znalazłem jakieś kawałki kodu, nawet jakiś framework, ale niestety nic tak do końca nie chciało działać. W końcu z tego wszystkiego udało mi się uzyskać kawałek kodu, który zadziałał i może się komuś przyda. Zasada odczytu danych z karty jest dosyć prosta. Jedyne czego potrzebujemy to czytnik kart (oczywiście pod USB), kartę zbliżeniową bądź kontaktową oraz najważniejsze &#8211; specyfikację techniczną karty dzięki której poznamy komendy bitowe pozwalające na operacje na karcie. </p>
<p><span id="more-228"></span><br />
Pierwszym krokiem jest dodanie do projektu biblioteki GemCard: klikamy prawym przyciskiem na projekcie, <em>Add Reference&#8230;</em>, wybieramy plik dll z dysku.<br />
Następnie w klasie gdzie chcemy implementować bibliotekę dodajemy:</p>
<pre class="prettyprint lang-cs">
<span class="nocode">1:</span>        using GemCard;
</pre>
<p>Tworzymy obiekty potrzebne do obsługi czytnika i wydawania komend, dodajemy jeszcze stałe oznaczające odpowiedź zapytania. W naszym wypadku będą to stany prawidłowej odpowiedzi oraz &#8220;w trakcie&#8221;.</p>
<pre class="prettyprint lang-cs">
<span class="nocode">1:</span>        static APDUCommand apduSelectFileMF = new APDUCommand(0x00, 0xA4, 0x00, 0x0C, null, 0x02);
<span class="nocode">2:</span>        static APDUCommand apduReadRecord = new APDUCommand(0x00, 0xB0, 0xFF, 0xFF, null, 0xFF);
<span class="nocode">3:</span>        CardNative iCard = new CardNative();
<span class="nocode">4:</span>        APDUParam apduParam = new APDUParam();
<span class="nocode">5:</span>        APDUResponse apduResp;
<span class="nocode">6:</span>        const ushort SC_OK = 0x9000;
<span class="nocode">7:</span>        const byte SC_PENDING = 0x9F;
</pre>
<p>Kolejnym krokiem będzie napisanie kilku prostych metod:</p>
<pre class="prettyprint lang-cs">
<span class="nocode">1:</span>        /// <summary>
<span class="nocode">2:</span>        /// Pobiera liste podlaczonych czytnikow oraz laczy sie z pierwszym na listy
<span class="nocode">3:</span>        /// </summary>
<span class="nocode">4:</span>        public void initReader()
<span class="nocode">5:</span>        {
<span class="nocode">6:</span>            string[] readers = iCard.ListReaders();
<span class="nocode">7:</span>            iCard.Connect(readers[0], SHARE.Shared, PROTOCOL.T0orT1);
<span class="nocode">8:</span>        }
<span class="nocode">9:</span>
<span class="nocode">10:</span>        /// <summary>
<span class="nocode">11:</span>        /// Rozlacza czytnik kart
<span class="nocode">12:</span>        /// </summary>
<span class="nocode">13:</span>        public void disconnect()
<span class="nocode">14:</span>        {
<span class="nocode">15:</span>             iCard.Disconnect(DISCONNECT.Unpower);
<span class="nocode">16:</span>             iCard.StopCardEvents();
<span class="nocode">17:</span>        }
</pre>
<p>Pozostaje już tylko napisanie odpowiednich metod wykonujących np. operację wyboru pliku lub odpytujących kartę o dane:</p>
<pre class="prettyprint lang-cs">
<span class="nocode">1:</span>        public void selectFile()
<span class="nocode">2:</span>        {
<span class="nocode">3:</span>            apduParam.Data = new byte[] { 0x3F, 0x00 };
<span class="nocode">4:</span>            apduSelectFileMF.Update(apduParam);
<span class="nocode">5:</span>            apduResp = iCard.Transmit(apduSelectFileMF);
<span class="nocode">6:</span>            if (apduResp.Status != SC_OK &#038;&#038; apduResp.SW1 != SC_PENDING)
<span class="nocode">7:</span>                throw new Exception(apduResp.ToString());
<span class="nocode">8:</span>        }
<span class="nocode">9:</span>
<span class="nocode">10:</span>        public byte[] readRecord()
<span class="nocode">11:</span>        {
<span class="nocode">12:</span>            apduParam.Reset();
<span class="nocode">13:</span>            apduReadRecord.Update(apduParam);
<span class="nocode">14:</span>            apduResp = iCard.Transmit(apduReadRecord);
<span class="nocode">15:</span>            if (apduResp.Status != SC_OK)
<span class="nocode">16:</span>                throw new Exception(apduResp.ToString());
<span class="nocode">17:</span>
<span class="nocode">18:</span>            return apduResp.Data;
<span class="nocode">19:</span>        }
</pre>
<p>Gotowe! Wystarczy teraz tylko zabrać się za pisanie programów dających dostęp do komputera, systemów a może nawet pomieszczeń? Powodzenia.</p>
<p><a ><img src="http://koras.pl/blog/wp-content/uploads/2009/12/Save.png" alt="Zapisz plik" title="Zapisz plik" width="24" height="24" class="alignnone size-full wp-image-265" /> GemCard.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://koras.pl/2010/01/07/obsluga-czytnika-kart-w-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

