Rozkład Gaussa
Napisany przez admin dnia 19.11.2009r. Kategoria: Tools
W związku z zajęciami na studiach napisałem aplikację, która pozwala użytkownikowi empirycznie przekonać się, że rozkład graniczny wyników pomiarów gdy te są niezależne i przypadkowe można opisać matematycznie przy pomocy tzw. funkcji Gaussa.
Obsługa programu jest banalna:
1. Klikamy Start / Stop
2. W momencie, gdy pasek postępu dojedzie do końca(1.5s), wciskamy “Button”.
3. Punkt 2 powtarzamy aż do czasu wciśnięcia klawisza Start / Stop.
Program ma symulować np. pomiar czasu w jakim samochód poruszając się ze stałą prędkością przejedzie daną trasę.
Histogram uaktualniany jest po każdym pomiarze. Można skalować obszar wykresu i przesuwać go. Więcej w pliku readme.
Gauss (71.4 KiB, 220 hits)
Wallpaper Download
Napisany przez admin dnia 16.06.2009r. Kategoria: Tools
Napisałem dziś fajny program, który ustawia jako tapetę systemów Windows obrazek stąd:
http://photography.nationalgeographic.com/photography/photo-of-the-day. Polecam ściągnąć i wypróbować![]()
WallpaperDownload (3 KiB, 146 hits)
Dobrze jest dodać program do autostartu, wtedy codziennie będziemy mieli nową, ładną tapetę
(Jeśli nie mamy łącza stałego lub routera, to w chwili startu systemu nie mamy jeszcze połączenia z internetem i program wyświetli błąd)
Edit: Jak się okazuje, NG nie zawsze udostępnia tapety ze swoich obrazków i wtedy program wyświetla błąd
![]()
CultureInfo
Napisany przez admin dnia 16.06.2009r. Kategoria: UserFriendly
W systemach z rodziny Windows użytkownik ma możliwość ustawienia sposobu formatowania (wyświetlania) takich rzeczy jak data czy waluta. Takie informacje w .Net możemy uzyskać od klasy statycznej CultureInfo (namespace Globalization). Czasem chcemy jednak, aby nasz program formatował dane wyjściowe (a także przyjmował wejściowe) w jednym, stałym formacie. Możemy wtedy postąpić w poniższy sposób:
1 2 3 4 5 6 7 8 9 10 11 12 13 using System; using System.Globalization; public class Example { public static void Main() { DateTime dateValue = DateTime.Now; Console.WriteLine("Data przy aktualnym ustawieniu: {0}", dateValue); CultureInfo culture = new CultureInfo("en-US"); Console.WriteLine("Data w en-US: {0}", dateValue.ToString(culture)); } }Co gdy chcemy ustawić inny format np. daty dla całej aplikacji? Co ciekawe – nie da się
Można natomiast ustawić CultureInfo dla każdego wątku z osobna:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { DateTime dateValue = DateTime.Now; Console.WriteLine("Data przy aktualnym ustawieniu: {0}", dateValue); Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); Console.WriteLine("Data w en-US: {0}", dateValue); } }Generalnie mieszanie w CultureInfo jest niezalecane. Użytkownik powinien móc wprowadzać, czy odczytywać przykładową datę w najbardziej sobie przyjaznym formacie. Jednak jak wiadomo od każdej reguły są wyjątki
![]()
Dobrym sposobem na sprawdzenie, czy twój program będzie działał w różnych miejscach świata jest tzw. turecki test.
Kompilowanie kodu “w locie” i C# 3.0
Napisany przez admin dnia 9.06.2009r. Kategoria: Bez Kategorii
Musiałem dziś napisać funkcję kompilującą w locie kod C#. Biorąc pod uwagę ilość tekstów (zwłaszcza anglojęzycznych) na ten temat nie powinno to sprawić nikomu problemów. No i nie sprawia do czasu gdy chcemy wykorzystać nowości takie jak np. LINQ czy rozszerzanie klas. Rozwiązanie przedstawione jest na poniższym listingu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using Microsoft.CSharp; class Program { static void Main(string[] args) { var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }); parameters.GenerateInMemory = true; string code = @" using System.Linq; using System; class Program { public static void Funkcja() { var q = from i in Enumerable.Range(1,100) where i % 2 == 0 select i; foreach(var x in q) Console.WriteLine(x); } }"; CompilerResults results = csc.CompileAssemblyFromSource(parameters, code); foreach(var x in results.Errors) Console.WriteLine(x); if(!results.Errors.HasErrors) results.CompiledAssembly.GetType("Program").GetMethod("Funkcja").Invoke(null, new object[0]); } }Mechanizm kompilacji w czasie wykonania jest naprawdę potężny. Polecam zapoznać się z opracowaniami na ten temat.
Magia serializacji
Napisany przez admin dnia 8.06.2009r. Kategoria: Bez Kategorii
Ogromną zaletą .Net Framework jest wbudowany mechanizm serializacji. Aby cieszyć się jego działaniem w naszych programach możemy wykorzystać poniższy listing:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /// <summary> /// Serializuje obiekt do stringa w base64 /// </summary> /// <param name="o">Obiekt do serializacji</param> /// <returns>Zserializowany obiekt</returns> static public string Serialize(Object o) { MemoryStream ms = new MemoryStream(); BinaryFormatter bf1 = new BinaryFormatter(); bf1.Serialize(ms, o); return System.Convert.ToBase64String(ms.ToArray()); } /// <summary> /// Deserializuje obiekt ze stringa w base64 /// </summary> /// <param name="theByteArray">String z zserializowanym obiektem</param> /// <returns>Zdeserializowany obiekt</returns> static public object Deserialize(string theByteArray) { MemoryStream ms = new MemoryStream(System.Convert.FromBase64String(theByteArray)); BinaryFormatter bf1 = new BinaryFormatter(); ms.Position = 0; return bf1.Deserialize(ms); }Powyższe funkcje operują na ciągach w base64. To pozwala przesyłać je wszędzie tam, gdzie możliwe jest przesyłanie danych tekstowych (np. w nagłówkach adresów internetowych).
Ściąganie plików z Internetu w .Net
Napisany przez admin dnia 4.06.2009r. Kategoria: Bez Kategorii
Czasem musimy ściągnąć jakiś plik z Internetu przez http lub ftp. Wtedy pomocny może być poniższy kawałek kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /// <summary> /// Pobiera zasób z internetu. /// </summary> /// <param name="address" />Adres zasobu.</param> /// <returns>Zasób w postaci ciągu znaków.</returns> private string GetFile(string address) { try { WebRequest request = System.Net.WebRequest.Create(address); WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream); return reader.ReadToEnd(); } catch { throw new System.Exception("Error while downloading: " + address); } }Warto zaznaczyć, że w ten sposób można sciągać nie tylko pliki ale też np. kody źródłowe stron internetowych.
Tips & Tricks
Napisany przez admin dnia 3.06.2009r. Kategoria: Bez Kategorii
Tym wpisem rozpoczynam serię tips & tricks na moim blogu. Będą to krótkie ciekawostki, które jednak mogą przydać sie w życiu programisty C#.
Czasem(choć bardzo rzadko) zdarza się, że korzystając z zewnętrznych bibliotek musimy posłużyć się zmienną czy metodą, której nazwa jest jednym ze słów kluczowych w C# (np. var czy class). Wystarczy wtedy przed właściwą nazwą dodać ‘małpkę’ i już możemy korzystać z danej nazwy normalnie. (np. aby zadeklarować zmienną ‘var’ typu int wpiszemy:
int @var;Taka zmienna w języku IL będzie miała nazwę ‘var’(bez małpki).
Hello World
Napisany przez admin dnia 3.06.2009r. Kategoria: Bez Kategorii
Witam na moim blogu. Będzie on poświęcony technologii .Net i językowi C#. Wprawdzie nie jestem ekspertem, ale mam nadzieję, że każdy, zarówno początkujący jak i zaawansowany programista, znajdzie tu coś dla siebie.