poniedziałek, 3 lutego 2014

.NET Framework - z czym to się je

Co to .NET?

Ogólnie rzecz biorąc .NET to framework - ogromna biblioteka wypuszczona przez Microsoft umożliwiająca nam pisanie programów z gotowymi już do tego funkcjami. Za pomocą .NET'u możemy pisać aplikacje typowe dla systemu Windows, aplikacje sieciowe, strony WWW etc. To biblioteka typowo skierowana w OOP (object oriented programming, lista języków znajduje się tutaj). Jako, że dot Net jest tworem Microsoftu to jesteśmy praktycznie zmuszeni do używania Visual Studio, by pisać pod niego efektywne programy.

Wikipedia mówi:
Zadaniem platformy .NET Framework jest zarządzanie różnymi elementami systemu: kodem aplikacji, pamięcią i zabezpieczeniami. W środowisku tym można tworzyć oprogramowanie działające po stronie serwera internetowego (IIS) oraz pracujące na systemach, na które istnieje działająca implementacja tej platformy (czyli nie tylko systemy z rodziny Windows, jednak implementacja .NETu na innych platformach jest dość "na siłę")

Jedne z ważniejszych elementów .NET
CLI - Common Language Infrastructure- struktura Microsoft .NET do obsługi programów wymagających różnych środowisk
CIL - Common Intermediate Language - wspólna platforma językowa .NET
CLR - Common Language Runtime - platforma uruchomieniowa danego programu

Tak więc wg tego obrazka



Kod z języka .NET (np. C# / VB etc.) jest kompilowany do neutralnego kodu jakim jest CIL, następnie owy język jest zamieniany w kod maszynowy przez CLR. Teraz jaki jest sens tego? O ile zadanie CIL jest dość proste, o tyle CLR musi zamienić kod CIL'a pod polecenia procesora i jego architekturę.

Dzięki tej metodzie twórcy języka muszą przeportować go tylko do CIL, reszta należy do CLR. Roboty jest o wiele mniej, wystarczy wyszukać w google ile możliwch architektur aktualnie występuje.

Plusy:
- Obsługa wielu języków
- Języki oferują podobną składnie (VB / C#), lecz może być wykorzystany w inny sposób
- Możliwość tworzenia potęznych stron WWW (ASP.NET, artykuł)
- Garbage Collector (kwestia dyskusyjna, dla lajków bardzo fajna rzeczy anyway)

Minusy:
- Host wymaga zainstalowanej biblioteki do uruchomienia danego programu (napisanie Hello Word w .NET 4.0 wymaga, by ktoś próbujący go otworzyć również go potrzebował, czyt. pobrał te 90+ MB)
- Wersja platformy podlega wersji Visual Studio, czyli na VS2008 nie stworzymy aplikacji w .NET 4.0, gdyż jest ono obsługiwane dopiero w VS2010
- Projektu z VS2010 nie otworzy się w VS2008, niezależnie od jego treści (trzeba tu trochę grzebać w plikach i pozmieniać ustawienia ręcznie)

Jest to telegraficzny skrót, gdyż rozpis wszystkich komponentów mógł bym zamieścić w oddzielnych artykułach. Imo jest to przerost formy nad treścią, ponieważ o dużo większe detale można zapytać
www.google.com

piątek, 31 stycznia 2014

DLL - Dynamic Link Library

Czasami bywa tak, że pisząc jakiś kod myślimy, że jego elementy przydadzą nam się w przyszłości, że jego zastosowanie będzie możliwe nie tylko w aktualnym projekcie, ale np. za miesiąc. Oczywiście można go zapisać na dysku, albo... stworzyć bibliotekę!

Czym jest biblioteka? Biblioteka to plik (skompilowany w formacie .dll) zawierający funkcje z których możemy później korzystać. Cechy takiej biblioteki

  1. Możemy zamienić ją w pojedynczy plik dll, do którego kodu nikt nie będzie miał wglądu
  2. Zagnieżdżanie skompilowanej biblioteki jest dużo bardziej poręczne
  3. Biblioteka przenosi nie tylko kod, ale także, np. grafikę (z czego głownie powstaje dla kodu, grafikę powinien zawierać plik .exe, nt.plik dll powinien ważyć jak najmniej)
  4. Co ciekawe - dzięki plikom dll można użyć funkcji C# w Javie, funkcji z C w C#, etc. Nie jestem pewien limitów tych możliwości, jednak jest to dość istotna możliwość. Na pewno występują problemy z wersjami (używanie DLLek z .NET 4.5 w 4.0 odpada, jednak działa to w przeciwną stronę)
Żeby stworzyć bibliotekę DLL:
1. Tworzymy nowy projekt, typ: Class library, nazywamy go przykładowo SimpleDll
2. Piszemy własny kod, niech to będzie np. funkcja do pisania czegoś na konsoli
3. Wciskamy "Start", w folderze projektu (u mnie):
\Documents\Visual Studio 2013\Projects\SimpleDLL\SimpleDLL\bin\Debug
Utworzył się plik SimpleDll.dll
4. Otwieramy / tworzymy nowy projekt konsolowy do testu
5. Klikamy Project -> Add Reference
6. Wybieramy z zakładki Browse naszą bibliotekę (wyszukamy ją ręcznie na dysku)
7. Teraz, gdy trafiła do drzewka po prawo (gałąź references) możemy używać jej kodu, np.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DllTest
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleDLL.DLLClass normalClass = new SimpleDLL.DLLClass();

            normalClass.WriteSth();

            SimpleDLL.DLLStaticClass.WriteSthAnother();

            Console.ReadKey();
        }
    }
}
Wynik na konsoli:
sth                   
snother sth      
To wszystko

poniedziałek, 24 czerwca 2013

Pułapka przypisania wartości / Assigment trap

Krótko i konkretnie, jako, że nie każdy mógł o tym wiedzieć.

Pierwsze pytanie, to jaką wartość dla x uzyskamy takim kodem?

byte x;
byte a=1;
byte b=2;
x=a=b;

Pomyśl nad prawidłową odpowiedzią chwilę...

Prawidłowa odpowiedź to 2
Mało tego, od powyższej instrukcji każda zmienna wynosi 2

Uzasadnienie jest proste, takie operacje przypisania wykonywane są od prawej do lewej strony, więc:
a=b;
x=a;

Jak to NIE działa
x=1=2;
Kompilator od razy powiadomi nas, o błędnym przypisaniu.
1 != 2

Trzeba sobie uświadomić, że w taki sposób można wartościować tylko zmienne i indexery, a samo 1 i 2 można potraktować jako const (1 to 1 a 2 to 2), tak samo z
bool b;
b=false=true;


To chyba koniec dobranocki, i uważajcie na takie proste błędy.
Diabeł tkwi w szczegółach

wtorek, 4 czerwca 2013

Regexp

Regexp to potężna zabawka, tzw. regularne wyrażenia (regular expressions) pomagają nam dostosować wyszukiwane wartości w tekście bez najmniejszego problemu

Z braku czasu w tym momencie mogę zamieścić tylko link do bardzo fajnej strony do nauki
http://regexone.com/
i
http://regexp.pl/

Jeśli ktoś nie wie o czym mówię, to w aktualnym stanie mogę jedynie polecić wpisanie w google:
"regexp, programowanie", albo "regexp, programming"

Regexp nie jest feature'm C#, występuje on w wielu wielu innych językach (zarówno z rodziny UNIX)

poniedziałek, 13 maja 2013

Sesja...

A wraz z nią nauka C i wątków pod Linuksa na przykładach ze średniowiecza
Z wykładów ciężko o konkrety, więc trzeba było pogoglować:
https://computing.llnl.gov/tutorials/pthreads/
To tak offtopem od C#

Czy tylko u mnie na uczelni większość profesorów zatrzymało się w czasie znając tylko 1 język, a o innych definicję z wiki? :)

sobota, 11 maja 2013

C# a Linux

Programiści pracujący na Linuxie zapewne wiedzą, że jest możliwość pisania programów w C#, lecz jeżeli ktoś będzie mieć zamiar kiedyś się pobawić linuksem bez pozbawiania się możliwości programowania w swoim ulubionym języku, to mogę polecić dwa IDE:

  1. Qt creator
  2. Monodevelop
  3. Codeblocks

Nie mam zbytniej ochoty na opisywanie wszystkiego w ilości większej, niż jedno / dwa zdania.

Qt creator - miły design, dobry debugger, Ci co programują w nim więcej mogli by powiedzieć ode mnie, bo ja korzystałem z

Monodevelop - można śmiało nazwać go portem Visual Studio, oczywiście nie jest tak obszerny, ale widząc go pierwszy raz na pewno nie będziemy się zbyt martwić o chaos. Polecam dla tych, którzy spędzili trochę czasu w VS

Codeblocks - typowe, mało ważące IDE. Chyba najlepsze w kwestii rozmiar / jakość

Nie orientowałem się w kwestii C# na Qt & CB, ale MD na 100% obsługuje C#

Monodevelop
  • Multi-platform
    Supports Linux, Windows and Mac OS X.
  • Advanced Text Editing
    Code completion support for C# 4, code templates, code folding.
  • Configurable workbench
    Fully customizable window layouts, user defined key bindings, external tools
  • Multiple language support
    C#, Visual Basic.Net, C/C++, Vala
  • Integrated Debugger
    For debugging Mono and native applications
  • GTK# Visual Designer
    Easily build GTK# applications
  • ASP.NET
    Create web projects with full code completion support and test on XSP, the Mono web server.
  • Other tools
    Source control, makefile integration, unit testing, packaging and deployment, localization

Tak wiem, brzmi jak bym faworyzował to IDE, ale po prostu jest dość przyjazne, i wspiera C# na systemie Linux

To tyle

niedziela, 5 maja 2013

Programowanie nie takie straszne...

Osoby zaczynające swą przygodę z programowaniem często dość szybko zostają zdemotywowani.
Kilka powodów, które uważam za istotne (z całym szacunkiem dla czytelników):

  • Grozi mi pała z przedmiotu, muszę się pouczyć bo nie dostanę na szlugi :\
  • Napisałem super elo mega Hello World, w takim tempie już jutro będę pisał Fifę 2141240!!!
  • Klasy, zmienne, stringi łingi, nie widzę nic konkretnego... na tym napiszę najwyżej kalkulator a i tak ten z windowsa lepszy...
  • Konsola konsola konsola, całe życie z tą durną konsolą?
  • Nie chce mi się...
  • Nie ogarniam...

Itp. itd.

 Niech to będzie motywujący wpis dla tych, którzy mają chęć rzucić programowanie w kąt

Zobaczmy, jak można napisać coś bardzo użytecznego, i jednocześnie prostego
ps. duża ilość kodu nie oznacza, że jest on skomplikowany

Klient FTP:
http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class

Przeglądarka WWW napisana w max 7 minut:


Odtwarzacz muzyki napisany w 5 minut


Konwerter muzyczny MP3 -> WAV ~~ 6 minut

Czemu to wszystko trwa tak krótko, i czemu (mam nadzieję) nie wydaje się koszmarem nocnym?
Ponieważ C# zawiera masę bibliotek, oraz (w porównaniu do przykładowo C++, chociaż to specyficzne porównanie, i proszące się czasami o hejt) jest dużo prostszym językiem.

Oczywiście są to aplikacje napisane w podstawowych wersjach, jeżeli będziecie uparci, to stworzycie coś ponad to. Nie ma osób specjalizujących się w każdej z tych dziedzin, dla jednej obsługa protokołów sieciowych będzie trywialne, dla innych magią (tak samo z plikami muzycznymi etc.)

Jak ktoś jest od wszystkiego, to jest do niczego

Dla tego polecam wgłębianie się w kierunku, który sobie wybierzecie, i w którym będziecie czuć się coraz pewniej. Na wszystko jest recepta, wystarczy cierpliwość, wujek google, i przede wszystkim dobry pomysł a czas zrobi swoje