Mateusz Zieliński

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)

Komentarzy :2,083 : więcej...

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 :)

Komentarzy :1,780 więcej...

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.

Komentarzy :2,068 więcej...

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.

Komentarzy :1,981 więcej...

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).

Komentarzy :1,879 :, więcej...

Ś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.

Komentarzy :1,835 :, więcej...

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).

Komentarzy :2,023 :, , więcej...

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.

Komentarzy :2,108 więcej...

Szukasz czegoś?

Użyj poniższej wyszukiwarki:

Nie znalazłeś tego co chciałeś? Zostaw komentarz lub skontaktuj się ze mną abym mógł się tym zająć :)

Znajomi!

Polecane linki...

Archiwum

Wszystkie wpisy chronologicznie...