Streaming PDC10 može se pratiti uživo i preko kućinh konekcija


U koliko niste stigli doći na jednu od 5 lokacija u Bosni i Hercegovini na kojima se održava live streaming PDC10, moguće ga je pratiti i preko javnih url adresa koje je obezbjedio Microsoft. Naime u koliko želite da gledate uživo prenos uvodnog predavanja Bob Muglia President, Server and Tools Business, te Steve Ballmer Microsoft chairman to možete učiniti sa sljedećih adresa:

 

PDC10 Keynote – http://bit.ly/PDC10BiHKeynote – samo za uvodno predavanje.
PDC10 Live Player – http://bit.ly/PDC10BiH   -sve sesije po redu, uzivo.

O konferenciji i sadržaju mogli ste vidjeti i na blog postu o PDC10, kao i tome da će prije svega biti posvećena novim rješenjima koja se usko vežu za narednu generaciju cloud servisa, frameworka, razvojnih alata, a treba napomenuti kako je upravo PDC konferencija mjesto na kojoj Microsoft još od 1991. godine redovno objavljuje najveće novosti vezane za Microsoft platformu uz izvrsna predavanja vodećih stručnjaka iz oblasti softvera.

P.S. Moja pretpostavka kako sam ranije rekao da će objaviti Internet Explorer 9, ako ne release onda sigurno RC.

Advertisements

Detaljni pregled LINQ – Integrirani SQL upiti u .NET programskom jeziku


LINQ ili Language Integrated Query je sastavni dio  .NET programskog jezika prilagođen da izvršava upit nad bilo kojom vrstom izvora podataka na način kako se to radi sa SQL jezikom. LINQ čini skup operatora koji po mnogo čemu sliče SQL komandama. Pomoću LINQ operatora mnogostuko se skraćuje vrijeme sortiranja, grupiranja, filtriranja podataka koji se dosada morao implementirati ili koristiti biblioteke trećih lica. LINQ koristimo kako za memorijske rtko i za eksterne izvore podataka poput DB i XML. Skraćenica LINQ najbolje bi se mogla prevesti kao SQL osobine integrirane u programski jezik.

Uvod

U Posljednjih 20 godina razvoj programskih jezika došao je do stadija kada posjedujemo moćne objektno orijentisane programske jezike poput C++, C# i JAVA. Programeri, koristeći ove jezike danas koriste sve blagodati OOP poput klasa, objekata, nasljeđivanja, polimorfizma, iskorištavanje postojećeg koda. Možemo kazati da je era OOP  došla do svog vrhunca, uz prethodno programeri danas koriste programske jezike koji imaju sposobnost oslobađanja i kontrole curenja memorije u programskim jezicima. U posljednjih nekoliko godina postavlja se pitanje šta dalje i u kom pravcu razvijati programske jezike, na način da pomažu programerima u razvijanju softvera.

Jedan pravac u kojem se programski jezici razvijaju, a koji je posljednjih nekoliko godina sve više zastupljen je razvijanje IDE alata za automatsko generiranje koda tzv. Rapid Application Developmen (RAD).  Danas kad pogledamo softvere za razvoj aplikacija vidimo mnogo ugrađenih alata za generiranje raznih, uglavnom ponavljajući sekvenci izvornog koda. Danas se aplikacije razvijaju na način da imate osjećaj kako radite u nekom od klasičnih softvera za crtanje: povlačite stavke iz kutija sa alatima, dijagramski pišete klase i dodajete metode, članove, nasljeđivate klase itd.

Sagledavajući današnju tehnologiju i pravac u kome se razvija buduća tehnologija, svakako je smanjivanje kompleksnosti pristupa i integracije informacijama koja nije prirodno povezana se OPP. Naime, svaka aplikacije manipuliše određenim podacima koji su po prirodi stvari odvojeni od same aplikacije. Podaci kojim manipulišemo dolaze uglavnom iz dva glavna izvora, a to su relacijske baze podataka i XML.

Manipulacija sa podacima koji dolaze iz ova dva izvora programera više stvara svestranijim nego stručnijim, jer stvara uslov poznavanja drugih tehnologija osim primarne tehnologije razvoja aplikacija u određenom programskom jeziku. LINQ projekat se bazira na problemima manipulacije podataka prethodno opisanih.  Engleski izgovor ove kratice izgovara se kratko LINK.

LINQ kako i sam naziv govori je sastavni dio primarnog programskog jezika, koji sa sastoji od standardnih operatora upita  za manipulaciju, projekciju i filtriranje sa podacima na način sličan kako se to radi pomoću SQL. Izvor podataka nad kojim se vrše upiti ne ograničava se samo na eksterne izvore podataka, nego na generalno svaki izvor podataka kako eksterni tako i interni – aplikacijski izvor podataka. Ovo omogućuje da programer ostaje u svom primarnom programskom jeziku dok manipuliše podacima iz izvora podataka.

LINQ operatori mogu se primjeniti na svaki izvor podataka koji je izveden iz IEnumerable interfejsa. Ovo omogućava razvijanje komponenti trećih strana baziranih na LINQ-u preklapanjem standardnih operatora. Do sada takvih implementacija je urađeno, a najpoznatiji su LINQ to Amazon, LINQ  to Google i td. Važno je spomenuti da se na Open Source zajednicama poput Source Forge pokrenuto više desitina sličnih projekata.

Upoznavanje sa LINQ

Najbolji način kako se približiti LINQ je da se napiše jednostavan primjer napisan u izvornom kodu.

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

//Konstrukcija LINQ upita
IEnumerable izraz = from g in gradovi where g.Length == 5 orderby g select g.ToUpper();

//izvršavanje upita na poljem stringova
foreach (string grad in izraz)
Console.WriteLine(grad);

}
}

Ako se ovaj program pokrene pritiskom na F5, dobijamo rezultat kao na sljedećoj slici.

image

Kao što smo naglasili svaki tip koji je izveden iz IEnumerable interfejsa podržava LINQ operatore. U našem primjeru koristili smo 3 standardna operatora upita: select, where, orderby. Isti primjer možemo napisati bez dotičnih operatora na sljedeći način:

var izraz = gradovi.Select(g => g.ToUpper())
.Where(g => g.Length == 5)
.OrderBy(g=>g);

Argumenti koji se pojavljuju u metodama standardnih upita zovem lambda izrazi (lambda expressions) , oni obezbjeđuju da se standardni operatori upita definišu posebno kao metode i spajaju lančano korištenjem tačka notacije (dot notation).

Izvršavanje LINQ upita

U prethodnom primjeru značajno je kazati da se evaluacija upita ne dešava u trenutku njegovog deklarisanja. Evaluacija LINQ upita se dešava u onom trenutku kada pristupamo varijabli odnosno u našem primjeru evaluacija upita vrši se u bloku koji je označen naredbom foreach. Ovakva odgođena (defered) evaluacija upita upit čini fleksibilnim i dozvoljava izvršavanje više puta sa jednom definicijom. Pretpostavimo sljedeći primjer:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

  //Konstrukcija LINQ upita
  var izraz = from g in gradovi where g.Length == 5 orderby g select g.ToUpper();

  //izvršavanje upita na poljem stringova
  foreach (string grad in izraz)
    Console.WriteLine(grad);

   Console.WriteLine("-------- Drugo izvršavanje upita----");

   //Modifikacija polja
   gradovi[1] = "Brčko";

   //ponovno izvršavanje upita na poljem stringova
   foreach (string grad in izraz)
    Console.WriteLine(grad);

   Console.ReadLine();
 }
}

Ako gornji primjer kompajliramo i pokrenemo rezultat se dobije kao na sljedećoj slici.

image

Upit se evaluira svaki put kada smo iterirali varijablu izraz. Međutim, odgođeno izvršavanje LINQ upita može dovesti u zabludu, posebno ako se ne poznaje dovoljno način na koji se izvršava LINQ upit. Kao dokaz uzmimo sljedeći primjer:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

   string prvoSlovo = "S";

   //Konstrukcija LINQ upita
   var izraz = from g in gradovi where g.StartsWith(prvoSlovo) select g;

   string ispisNaKOnzolu = "Gradovi koji počinju s prvim slovom '" + prvoSlovo + "'\n";

   //promijenimo varijablu prvoSLovo
   prvoSlovo = "B";

   Console.WriteLine(ispisNaKOnzolu);

  foreach (string grad in izraz)
   Console.WriteLine(grad);

   Console.ReadLine();
}
}

U primjeru imamo definisan LINQ upit sa varijablom prvoSlovo, i gdje smo formirali LINQ upit kada je dotična varijabla imala vrijednost „S“. U normalnim uslovima, onako kako smo naučili da se varijable inicijaliziraju i po logici stvari, LINQ upit bi trebao vratiti sve gradove koji počinju sa prvim slovom S. Medjutim, rezultat upita je vratio gradove koji počinju slovom B, jer smo vrijednos slova B, pridružili vrajiabli prije same evaluacije LINQ upita, što potvrđuje i pokretanje primjera i sljedeća slika.

image

To upravo pokazuje način i vrijeme kada se LINQ upit generiše i evaluira nad izvorom podataka.

LINQ standardni operatori upita

Prethodno smo vidjeli upotrebu nekoliko operatora upita. U ovom poglavlju pozabavit ćemo se više oko ovih operatora, te vidjeti na koji ih način koristiti efikasno u programima. Razvijajući aplikacije, programer  konstantno rješava određene probleme manipulacije sa podacima, riješava i definiše algoritme I pomoćne programe. U tu svrhu koriste se određene preinstalirane biblioteke kao i biblioteke od trećih lica. Nažalost, nismo uvijek u prilici da sa bibliotekama koje koristimo imamo riješene sve probleme.

LINQ operatori upita mnoge naše probleme kojim smo svakodnevno okruženi tokom razvoja aplikacija, mogu zaista efektivno riješiti u samo nekoliko linija koda. Kao što smo kazali LINQ ne predstavlja manipulaciju samo sa eksternim izvorima podataka, jer se mogu koristiti I kako smo ranije kazali sa memorijskim izvorima podataka. U narednom tekstu upoznat ćemo se sa operatorima upita te kroz primjere primjene pokazati njihovu jednostavnost, efikasnost i lakoću.

Operatori sortiranja (orderby, reverse, descending)

Već smo u  prvom dijelu vidjeli upotrebu sortiranja podataka. Prednosti korištenja ovog operatora nad kolekcijama koje nemaju implementiranu ovu mogućnost su vrlo korisne. Uzmimo iz prethodnog primjera polje stringova i primjenimo operator sortiranja. Npr sortirajmo uzlaznim i slizanim redom gradove u BiH:

//sortiranje niza abecedno
var g1 = gradovi.OrderBy(g=>g);
var g2 = gradovi.OrderByDescending(g=>g);

Međutim, sortiranje možemo izvršiti po nekom drugom kriteriju npr.  po broju slova u nazivu.

//sortiranje niza po broju slova u nazivu
var gs1 = gradovi.OrderBy(g=>g.Length);
var gs2 = gradovi.OrderByDescending(g=>g.Length);

Kriterije možemo lančano slagati i sa tačka notacijom. U tom slučaju koristimo ThenBy operator poslije OrderBy operatora. Kombinirajmo prethodna dva primjera i napišimo sljedeći primjer:

//sortiranje niza po broju slova u nazivu i abecedno
var g = gradovi.OrderBy(g => g.Length).ThenBy(g => g);

Reverse operator koristimo kada želimo sortirani niz obrnuti. Sljedeći primjer prikazuje upotrebu operatora Reverse i OrderbyDescending, da bi prikazali suštinsku razliku između ova dva operatora.

//suštinske razlike operatora sortiranja
var g1 = gradovi.OrderBy(g => g.Length);
var g2 = gradovi.OrderByDescending(g=>g.Length);
var g3 = gradovi.OrderBy(g => g.Length).Reverse();

Rezultat prethodnih upita prikazan je na sljedećoj slici:

image

Reverse operator za razliku od OrderBy operatora  oslanja se samo na poredak podataka koji je dobijenih iz izvora podataka.

GroupBy operator

Skup standardni operatora upita čini i operator grupiranja GroupBy, koji uspostavlja podjelu nad sekvencijalnim vrijednostima baziranih na funkcijama ekstrakcije. Ovaj operator vraća skup IGrouping podataka za svaki različiti vrijednosni kriterij. Svakako da je IGrouping izvedeni interfejs od IEnumerable koji dodatno sadrži kriterij koji je korišten za ekstrakciju podataka iz izvora. Jednostavan primjer upotrebe GroupBy operatora možemo predstaviti na sljedećem primjeru:

class Program
{
static void Main(string[] args)
{
   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };

   //Grupiranje po dužini riječi
   var grupeGradova = gradovi.GroupBy(g => g.Length);
   foreach (IGrouping grupe in grupeGradova)
     {
        Console.WriteLine("Dužine riječi u nazivima gradova od {0} slova", grupe.Key);
        Console.WriteLine("-----------------------------------------------");

        foreach (string grad in grupe)
           Console.WriteLine("  {0}",grad);
      }

   Console.ReadLine();
 }
}

Poslije pokretanja ovog programa rezultat je prikazan na sljedećoj slici:

image

Agregacijski operatori

Agregacijski operatori koji su podržani u LINQ definišemo na sličan način, kao I prethodne operatore. Napišimo primjer upotrebe agregacijskog operatora Agregate. Ovaj operator vrši određenu kalkulaciju na sekvencom podataka. Operator vrši operacije koristeći  lambda izraze nad svakojm sekvenco podataka. Sljedeći primjer izračunava broj karaktera korištenih u cijelom nizu:

   //Definisanje polja stringova gradova
   string[] gradovi = {
                        "Sarajevo",
                        "Tuzla",
                        "Mostar",
                        "Banja Luka",
                        "Zenica",
                        "Bihać",
                        "Cazin"
                    };
   int brojSlova = gradovi.Aggregate(0, (c, s) => c + s.Length);
   Console.WriteLine("Broj slova svih gradova u nizu iznosi: {0}",brojSlova);

Rezultat pokretanja programa:

image

Agregate operator propisuje  Count  operator i 4 numerička agregacijska operatora(Min, Max, Sum, i Average) minimum, maksimum, suma i srednja vrijednost respektivno. Ovi se numerički operatori procesuiraju nad sekvencama podataka bilo kojeg numeričkog tipa podataka: int, double, decimal i sl. Sljedeći primjer prokazuje upotrebu nekoliko pomenutih operatora:

int[] brojevi = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int ukupno = brojevi.Sum();
int sumaKvadrata = brojevi.Sum(x=>x*x);
Console.WriteLine("Suma članova niza: {0}",ukupno);
Console.WriteLine("Suma kvadrata članova niza: {0}", sumaKvadrata);

Rezultat pokretanja programa prikazan je na sljedećoj slici:

image

Sintaksa upita u LINQ

U prethodnim paragrafima vidjeli smo načine kako možemo formirati upit nad izvorom podataka. Takodjer se može primjetiti da svaki upit možemo formirati na dva, u suštini ista, a sintaktički različita načina. Naime svaki LINQ upit formiran Lambda izrazom, takodjer  možemo formirati tačka notacijom (Dot Notaton). Ovakav fleksibilam pristup definisanju upita u LINQ rezultat su proširenja koja se pojavljuju u verziji C#3.0, a koje smo spominjali u prethodnim blog postovima postovima. Npr. definišimo LINQ upit tačka notacijom. Imamo:

var izraz= nazivi.Where(s=>s.Lenght==6)
                     .OrderBy(s=>s)
                     .Select(s=>s.ToUpper());

Prethodni upit  možemo formirati Lambda izrazom na sljedeći način:

var izraz= from s in imena
              where s.Lenght ==6
              orderby s
              select s.ToUpper();

Na kraju ovog članaka pobrojat ćemo sve operatore koji se mogu pojaviti u LINQ upitima:

OPERATOR

Opis

Where

Restriktivni operator.

Select / SelectMany

Operator projekcije.

Take/Skip

TakeWhile/SkipWhile

Parcijalni operator baziran na poziciji ili uslovnoj funkciji.

Join/GroupJoin

Operator spajanja u odnosu na zadani uslov.

Concat

Operator spajanja.

OrderBy/ThenBy/

OrderByDescending

ThenByDescending

Sortiranje u uzlaznom, silaznom smijeru u odnosu na zadani uslov.

Reverse

Operator sortiranja sekvence u suprotnom smijeru

GroupBy

Operator grupiranja u odnosu na zadani uslov.

Distinct

Operator uklanjanja duplikata elemenata u skupu.

Union/Intersect

Operatr koji vraća uniju ili podskup zadanih skupova elemenata.

Except

Operator koji vraća komplement zadanog skupa.

ToSequence

Operator konverzije u IEnumerable

ToArray/ToList

Operator konverzije u List

ToDictionary/ToLookup

Operator konverzije u Dictionary ili LookUp u odnosu na zadani ključ.

OfType/Cast

Operator konverzije u Ienumerableu odnosu na filtrirane elemente ili konverzije u tip argumenta.

EqualAll

Operator jednakosti koji vraća jedenake uparene elemente.

First/FirstOrDefault/

Last/LastOrDefault/

Single/SingleOrDefault

Operator vraćanja početne/zadnje/jednog elementa u odnosu na zadanu funkciju.

ElementAt/

ElementAtOrDefault

Operator vraćanja elementa određene pozicije.

DefaultIfEmpty

Operator zamjene prazne vrijednosti sa podrazumijevanom.

Range

Generatorski operator vraćanja broja u opsegu.

Repeat

Generatorski operator vraćanja višestrukih pojavljivanja elementa zadane vrijednosti.

Empty

Generatorski operator vraćanja prazne sekvence.

Any/All

Kvantifikator provjere egzistencije ili univerzalnosti funkcije izraza.

Contains

Kvantifikator provjere postojanja datog elementa.

Count/LongCount

Agregacijski operatori brojanja elemenata.

Sum/Max/Min/Average

Agregacijski oparatori kao opcione funkcije selektora.

Aggregate

Agregacijski oparator , vidi dio III

References

1. The LINQ Project .NET Language Integrated Query May 2006 Don Box, Architect, Microsoft Corporation and Anders Hejlsberg, Technical Fellow, Microsoft Corporation
2. http://forums.microsoft.com/msdn/showforum.aspx?forumid=123&siteid=1
3. http://weblogs.asp.net/scottgu/
4. http://microsoft.com

Oktobarski sastanak Bihać .NET User grupe


Sastanak Bihac .NET User Grupe: Edukativni Centar Laser Doo, 28. Oktobar u 17 sati.

Bihać .NET User grupa organizira svoj drugi odnosno treći po redu sastanak. Ovog puta će to biti live prenos uvodnog predavanja sa PDC2010 – Microsoftove  konferencije za developere, koji će se održati od 28.-29 10. 2010. godine u Redmondu.

Koliki je interes za ovu konferenciju pokazuje i činjenica da su mjesec dana prije početka konferencija sva mjesta rasprodana. Ove godine PDC2010 će se po prvi put prenositi i uživo gdje će pored učesnika konferencije hiljade ljudi dijem svijeta uživo gledati cijelokupnu konferenciju. Pored navedenog PDC2010 će se grupno prenositi na rednovnim sastancima User grupa diljem svijeta. I naša grupa kao i user grupe u Bosni i Hercegovini prenosit će grupno uvodno predavanje. Na http://www.microsoftpdc.com/Local zvaničnoj stranici PDC2010 izlistane su sve User grupe koje će ovaj događaj pratiti uživo. Naravno i naša kao i ostale user grupe iz BiH se nalaze na ovoj listi. Biće vrlo interesantno pratiti ovaj događaj kada znamo da Microsoft sprema grupu novih proizvoda da objavi poput Windows Phone 7, Internet Exporer 9, skup novih alata, cloud servisi i mnoštvo drugih stvari.

Na PDC2010 pored uvodnog predavanja održaće se ukupno 160 predavanja raspoređenih u 3 smijera i to: Client & Device, Cloud Service i Framework & Tools.

Client & Device – smijer na kojem će se najviše govoriti o Windows Phone 7 i razvoju aplikacija na ovoj platformi, kao i Internet Explorer 9 koji će vjerojatni biti objavljen na ovoj konferenciji. Ovu informaciju nisam nigdje čuo nego iz iskustva bi se moglo pretpostaviti da će se to desiti.

Cloud Service – tehnologija budućnosti u kojoj je Microsoft skoro sve svoje proizvode poput Windows OS, SQL Server, Office application razvio i verzije koje se vrte u oblacima. Računanje u oblacima je budućnost i na PDC2010 će se čuti zadnja dostignuća u ovoj oblasti.

Frameworks & Tools – razne teme posvećene microsoftovima programskim jezicima, i alatima za razvoj poput LightSwitch i sličnim razvojnim alatima.

Kao i svaki drugi sastanak imaćemo i vrijedne nagrade, a i predstavit ćemo neke nove sponzore, koje smo dobili od zadnjeg sastanka. Registracija na sastanak je kao i svaki put na oficijelnoj stranici www.bihac.mscommunity.ba.

Vidimo se na sastanku.

Poglavlje III – IZVODI FUNKCIJE


Zadnji u nizu blog postova teksta iz 1996 godine. Cjelokupan tekst može se pogledati ovdje.

1.1 Povijest izvoda

Kad ne bi bilo izvoda (derivacije) svi naši snovi vezani za uspjeh u polju matematike bili bi lako ostvarivi. Matematika bi se bavila samo elementarnim stvarima. Doista, matematika bi se svela na elementarnu matematiku. Kažu da padom jabuke na Newtonovu glavu sve je krenulo drugačije. Ta nesretna jabuka okrenula je Newtona tada ka spoznaji osnovnih zakona dinamike i gravitacije. Newton je za dokaz svojih zakona, povrh siromašnih eksperimenata koje je izvodio, za svoje zakone morao naći matematički aparat da ih dokaže. Otkrićem diferencijalnog i integralnog računa Newton je dokazao svoje zakone, a nama običnim smrtnicima – studentima ostavio jabuke i diferencijalni račun za posvetu.

Mnogi filozofi se spore o tome koliko je jabuka palo na Newtonovu glavu. Veliki dio njih zagovara tezu da je nemoguće da padom samo jedne jabuke opravdava činjenicu Newtonovog djela. Po njihovom mišljenju smatra se da je na Newtonovu glavu palo bar desetak jabuka i to krupnijih koje rastu na vrhu drveta, u malom vremenskom intervalu clip_image002. Kad ne bi bilo izvoda, čitav ovozemaljski razvoj tehnike i tehnologije sigurno bi bio na stepenu razvoja u Newtonovo doba. Možemo s pravom reći da smo imali sreće. Da nema izvoda sigurno ne bi bilo ni kompjutera, ni video igrica ni flipera. Povrh svih mučnina koje nam zadaje izvod, ipak neka samo postoje kompjuteri i ostalo uz njih, a za izvode ćemo lako – rekao je neko iz mase.

POJMOVI PREKO KOJIH SE DEFINIŠE IZVOD

Da bismo definisali izvod neke funkcije moramo objasniti neke sporedne stvari koje okružuju izvod, a to su:

• Tangenta i konstrukcija tangente

• Srednja i trenutna brzina

1.1.1 Konstrukcija tangente

Definicija tangente u elementarnoj geometriji, koja se radi u osnovnoj školi, definiše tangentu kao jednu pravu koja ima samo jednu zajedničku tačku sa kružnicom. Međutim, ima tu nešto. Tačno je da se radi o jednoj tački i tačno je da se radi o pravoj. Međutim, kada pogledamo iz drugog ugla stvari odnosno sliku 3.1, vidimo kako jedna prava clip_image004 siječe parabolu samo u jednoj tački, ali ova prava nije tangenta date parabole u toj tački. Prava tangenta u toj tački je prava clip_image006 koja je normalna na pravu clip_image004[1] i prolazi tačkom clip_image008.

clip_image010

Slika  3.1  Položaj krive, sječice i tangente

Da bi smo došli do valjane definicije tangente uočimo sliku i sve što je na njoj nacrtano. Slika 3.2 sadrži jednu krivu clip_image012, dvije tačke clip_image014te pravu clip_image016koja spaja ove tačke. Vidimo da prava clip_image018 siječe krivu u obliku kriške lubenice te ćemo je nazvati sječica clip_image020. Kada hoćemo da odsjećemo što manji komad lubenice odnosno krive, mi ćemo postupiti tako da tačkuclip_image022pomjeramo prema tački clip_image024 preko ruba lubenice odnosno krive. Ako se tačka clip_image026, krijući se, približava tački clip_image024[1] kriška lubenice će se sve više smanjivati.

clip_image028

Slika  3.2  Sječica

Sječica će se mijenjati u odnosu na početni položaj, i kad tačka clip_image026[1] teži tački clip_image024[2], teži jednom graničnom položaju. Granični položaj sječice clip_image020[1] upravo će biti tangenta, tj. lubenica će ostati čitava.

Definicija 3.1.

Tangenta krive  u datoj tački clip_image030 zove se granični položaj sječice clip_image032 kada tačka clip_image034 ove krive teži  po krivoj ka tački clip_image030[1].

Ako se napravimo Englezi i želimo da ne odsječemo lubenicu tj. da nam tačka clip_image026[2] teži tački clip_image024[3] koeficijent smjera krive u tački clip_image024[4] jednak je koeficijentu smjera tangente krive u toj tački. Sve prethodno rečeno kažimo na jednom drugom (matematičkom) jeziku.

Posmatrajmo sliku, tamo ćemo vidjeti krivu clip_image012[1] sličnu prošloj krivoj i koordinatni sistem clip_image036. Ova kriva koju vidimo je grafik neprekidne funkcije clip_image038. U gornjem dijelu smo kazali da je kojeficijent smjera sječice koja prolazi tačkama clip_image040 koje imaju koordinateclip_image042, a clip_image044. Koordinate tačke clip_image026[3] lako se prepoznaju ako znamo da je clip_image046 odnosnoclip_image048, što se sa slike može vidjeti. Nadalje, znamo da je koeficijent smjera dat izrazom:

clip_image050

(2.1)

clip_image052

Slika  3.3  Sječica

Dakle koeficijent smjera tangente clip_image006[1] krive clip_image038[1] u tački clip_image054 jednak je graničnoj vrijednosti količnika clip_image056 priraštaja funkcije clip_image058 i priraštaja argumenta (nezavisno promjenjive clip_image060) clip_image062 kad on teži nuli.

Kao i u Poglavlju I (Matematička indukcija) mi definišemo neke sporedne pojmove, nesvjesno dolazimo do onoga čemu ovdje težimo da definišemo – to je prvi izvod funkcije. Zadnja tvrdnja koju smo napisali izraz 2.1 zovemo prvi izvod funkcije clip_image064 ili kraće izvod funkcije clip_image064[1], a kojeg obilježavamo sa clip_image066 (čitaj clip_image068 prim jednako clip_image070 prim od clip_image060[1]). Dakle prvim izvodom funkcije zovemo:

clip_image072

(2.2)

Na ovaj način smo definisali šta je koeficijent smjera krive u tački, odnosno koeficijent smjera tangente u tački, a istovremeno smo se upoznali sa osnovnom metodom određivanja koeficijenta smjera tangente u datoj tački krive, odnosno vidjeli smo jednostavni postupak konstruisanja tangente.

1.1.2 Srednja i trenutna brzina

Iz fizike nam je dosta stvari jasno kada spomenemo srednju i trenutnu brzin. Kada smo slušali predavanja iz fizike profesori su nam objašnjavali da je srednja brzina količnik priraštaja puta clip_image074 i vremenskog intervala clip_image076tj. priraštaja vremena za koje je tijelo prešlo put clip_image074[1], odnosno:

clip_image078

(2.3)

Znamo da je zakon puta skoro uvijek povezan sa vremenom clip_image006[2], pa je clip_image080. Ako posmatramo priraštaj puta clip_image074[2] koji je tijelo prešlo za clip_image082 možemo napisati kao clip_image084, pa nam je srednja brzina jednaka:

clip_image086

(2.4)

S gornjim izrazom uvijek se može izračunati neka srednja brzina koje se u toku nekog vremenskog intervala clip_image082[1] promijenila više puta. Međutim, ako posmatramo vremenski interval clip_image082[2] što manji promjene brzine za dati vremenski interval će biti sve manje. Kada pustimo da clip_image088 srednja brzina će postati trenutna:

clip_image090

(2.5)

Trenutna brzina (brzina u trenutku t odnosno clip_image092 je granična vrijednost srednje brzine u vremenskom intervalu clip_image094 kad clip_image096. Drugim riječima:

clip_image098

(2.6)

I ovdje vidimo da je trenutna brzina kretnja izvod dužine puta po vremenu. Na ovaj način (preko srednje i trenutne brzine) je Newton definisao izvod funkcije pa se čak može reći da je orginalna definicija izvoda upravo definisana preko srednje odnosno trenutne brzine. Možemo s pravom kazati: Izvod je brzina promjene dužine puta po vremenu.

 

1.2 Pojam IzvodA funkcije

Namjernim raspravljanjem o tangenti i srednjoj i trenutnoj brzini odnosno koeficijentu smjera tangente došli smo do pojma izvoda:

clip_image066[1]

(2.7)

Kao i kod definisanja trenutne brzine, u koliko je poznat zakon puta clip_image080[1], do pojma izvoda možemo doći bilo kakvim izračunavanjem brzine promjene neke veličine u toku vremena ako je poznat zakon ovisnosti te veličine od vremena.

Definicija 3.2.

Izvod funkcije clip_image100 po argumentu clip_image102 je granična vrijednost količnika priraštaja funkcije i priraštaja argumenta kad priraštaj teži nuli, tj.

clip_image104

Kada govorimo o izvodima često se spominje riječ od 3 slova – diferenciranje. Diferenciranje nije ništa drugo do granični proces kojim se dolazi do izvoda y’ funkcije clip_image068[1]. Za funkciju clip_image038[2] koja ima izvod u tački clip_image060[2] kažemo da je diferencijabilna u toj tački. Kada kažemo da je funkcija direfencijabilna na nekom intervalu clip_image106 to znači da je ista diferencijabilna u svakoj tački intervala.

Vidjeli smo i prije nego smo definisali izvod da ona (kako je na početku rečeno) ima veliku primjenu. Kada krenemo od geometrijske interpretacije izvoda do mehanike, preko fizike i td, sve do kompjutera video-igrica i flipera.

Razmotrimo jednu važnu osobinu izvoda funkcije, a to je diferencijabilnost i neprekidnost. Prije nego smo interpretirali izvod, pretpostavljali smo da nam funkcija mora biti neprekidna. Neprekidnost i diferencijabilnost tvore sljedeću teoremu:

Teorema 3.1.

Ako funkcija clip_image100[1] definisana na intervalu clip_image108 ima izvod u tački koja pripada tom intervalu odnosno clip_image110, (odnosno diferencijabilna je u datoj tački), tada je ona i neprekidna.

Dokaz:

Pretpostavka teoreme je da je funkcija diferencijabilna u tački clip_image060[3] tj. postoji clip_image112. Ako nam je clip_image114, tada možemo pisati:

clip_image116

Sada imamo, ako primijenimo granični proces na zadnji izraz:

clip_image118

Dakle, kada clip_image120, tada clip_image122. To znači da diferencijabilna funkcija clip_image038[3] je istovremeno i neprekidna u datoj tački.

Ovo je jedan od najvažnijih teorema koji se tiče Izvoda funkcije. Jednostavno bez ovog teorema ne bi smo mogli tako jednostavno “šetati” područjem izvoda. Gotovo kod svakog zadatka koji se tiče izvoda neke funkcije koristi se ovaj teorem.

Ako bi se pitali da li važi obrnut teorem, tj. da li je funkcija diferencijabilna ako je neprekidna, odgovor na ovo pitanje bio bi “NE”. Prije nego dokažemo ovaj teorem pročitajte sljedeću napomenu.

Napomena 3.1.

U matematici postoje dokazi za neke teoreme koje sprovodimo na taj način da nađemo bar jedan primjer koji opovrgava datu teoremu. Jednostavno pokazujući na jednom primjeru kontradiktornost teoreme mi je samim tim i dokazujemo.

Teorema 3.2.

Da li važi obrnut teorem prethodne Teoreme 2.1.

Dokaz:

Ovaj teorem ćemo dokazati navođenjem samo jednog primjera koji govori o tome da obrat ne važi. Posmatrajmo funkciju clip_image124. Ta funkcija je neprekidna na čitavom intervalu realnih brojeva. Graf funkcije daje je na slici 2.3. Sa slike se može vidjeti da jeclip_image126a clip_image128. Iz zadnjih izraza vidimo da je granična vrijednost količnika clip_image130za lijevu i desnu graničnu vrijednost po argumentu clip_image132različita, što znači da derivacija funkcije clip_image124[1] u tački clip_image134 nema jedinstven izvod. Drugim riječima funkcija clip_image038[4] u tački clip_image134[1] nije diferencijabilna. Dokaz teoreme je završen.

clip_image136

Slika  3.4  Grafik funkcije clip_image138.

Na osnovu prethodne dvije teoreme zaključujemo: svaka diferencijabilna funkcija ujedno je i neprekidna, dok svaka neprekidna funkcija nije uvijek i diferencijabilna. Pojam diferencijabilnosti je uži pojam od pojma neprekidnosti.

Matematika odabrana poglavlja konačno u digitalnoj formi


Naslovna stranica MATEMATIKAU nekoliko blog postova objavljivao sam dio tekstova iz matematike kojeg sam davno pisao (1996. god), većinom uz svijeću jer prošlo je nekoliko mjeseci od prestanka rata, dok se uspostavio elekto-prenosni sistem. Nažalost sva planirana poglavlja nisam napisao, šteta, jer danas se ne mogu vratiti u tu furku koju sam tada furo, pa nastaviti ovo po meni vrlo korisno djelo pisati. Po reakcijama koji su mi prijatelji i rijetki čitaoci davali, nije izgledalo loše. Isto tako, od kako sam objavio prve stranice  teksta na blogu, post se jako puno čita što potkrepljuju i statistike koje pratim na blogu. Isto tako u rubrici “Naj postovi” svi mogu vidjeti da se tu konstantno nalaze članci o matematičkoj indukciji. Danas sam konačno završio naslovnu stranu, i otkucao sav tekst koji planiram objaviti. Ostalo je jedno nedovršeno poglavlje koje sam odlučio da ga ne uključujem. Naslovnu stranu koju sam osmislio, sproveo je u djelo moj prijatelj Almir Štrkljević oko 1997 godine.

Naime, kod naslovne strane imao sam ideju da prikažem karikaturu Newtona i famozne jabuke, kao i karikaturu integrala \int f(x) dx. Svojom nadarenošću i sklonošću za crtanjem stripova i karikatura Almir je to vrlo zdušno prihvatio i potrudio se da onako, kako sam zamislio da to i nacrta. Ovom prilikom mu se od srca zahvaljujem.

Tekst sam prekucao i  nije prošao lekturu i korekcije pa sam svjesan da sadrži puno kako kucanih tako i gramatičkih grešaka. Pokušaću ih ispraviti prije nego što cijelokupni tekst stavim za download.

U ovom sabranom radu nalaze se tri poglavlja i to : Matematička indukcija, Funkcije i Izvodi. Knjiga sadrži oko 100 stranica A4 formata i veličine fonta 11.

U koliko nađete za shodno da vam može poslužiti ova knjiga slobodno je komentirajte i dajte svoje sugestije i primjedbe. Nažalost, ne namjeravam ovu knjigu obrađivati ponovo odnosno pisati naredno izdanje, jedini cilj mi je bio pretvoriti je u digitalnu formu.  Cjelokupan tekst može se pogledati ovdje.

Na kraju nekoliko fotografija rukopisa:

IMAG1022IMAG1023IMAG1024IMAG1028

Šta se dešavalo na prvom sastanku Bihac.NET User grupe


IMAG0977Na samom početku ovog posta moram priznati da organizovanje sastanaka nije nimalo jednostavna rabota, otud skidam kapu Damiru i drugim leaderima user grupa kako u Bosni i Hercegovini tako i šire. U Bihaću je ovog četvrtka to bilo posebno jer se radilo o prvom zvaničnom sastanku, a drugom po redu, jer smo u maju ove godine imali inicijalni sastanak.

IMAG0980Imao sam skoro mjesec dana do sastanka, tako da sam skoro pa spamovo informaciju o sastanku na FB, Twitteru, kafićima mahalama i sl. Džaba ti sve ali niko ni da trepne, javiše se nekoliko mojih kolega i kad sam na kraju prebrojao i oduzeo one što i kad kazu da će doći 100% ne dođu, ostade 11 posjetilaca uključujući i gosta i domaćina. Ali rekoh kad u Sarajevu ne dođe 20 ljudi onda u Bihaću ovih 11 i previše.

Za ovaj prvi sastanak pozvao sam Dragana, rekoh Dragane spašavaj situaciju i nafali, laži petljaj samo da uspijemo malo probuditi zainteresiranost ljudi u Bihaću oko tema koje im sutra mogu biti kruh, kako  za njih tako i za njihovu familiju.I fakat prevalivši više od 1000 km (nije da se sad ulizivan i hvalim Smile) Dragan je tačno u pola 3 došao u Bihać. Vidno umoran jer putuje iz Bijeljine (uvijek izostavljam ovo i  kod ovog grada neznam zašto, pa moram posebno pratiti kako ga pišem), u kojoj je dan prije držao također sastanak Bijeljniske user grupe, bio je odlučan da izvuče situaciju i u Bihaću :).

I ored toga što sam pretpostavio kako će se stvari odvijati na sastanku, ipak ništa se nije odvijalo onako kako sam zamislio jer je umjesto 11 ljudi koji su se prijavili na predavanje došlo njih blizu 25, što mi u jednom trenutku vrati osmijeh na lice, da se ne osramotim pred gostom koji prevali 1000 km. Nako početnih stresova i 20-tak telefonski poziva sa upitima gdje se nalazi taj edukativni centar, evo mene nema nikoga, i sličnih ubadanja konačno i započe prvi tako očekivani sastanak.

IMAG0983I dok se Dragan pripremao za prezentaciju, nisam ni vidio da je počeo prezentaciju otvorivši notepad sa tekstom gdje radi (to svi znaju jer stim sam ih navlačio da dođu), mail adresom i  web stranicom MSCommunityBiH. E onda sam već bio svjestan da se ovo odvija u potpuno drugom smijeru. Malo zatim otvori Dragan Powerpoint, i poče rešetati po LightSwitchu, WebMatrixu i Windows Phone 7-mici. Kad poče ovo zadnje reko “ustavi de nešto i meni ostavi”.

Na kraju i domaćina zapade nešto da kaže na ovom sastanku, prvi demo otključani Windows Phone Emulator, skinut sa rapidshare, za kojeg sam ranije rekao da ne pokušavaju kod kuće jer nije baš 100% legalno, tek se sad Dragan poče preznojavati šta će ovaj do kraja sastanka još pokazati.

Na kraju podijelismo skromne poklone prisutnim jednu MSPress knjigu, svakome svesku, nešto naljepnica i prospekata. Dovoljno dok ne dođe Kits koji sam naručio.

Šalu na stranu prvi sastank prođe u vrlo dobroj atmosferu sa posjetom više od oečekivanog, te vidno zainteresiranim gledateljima sa sastanka. Obećaše doći za mjesec dana na live prenos keynotea iz Redmonda. Dobih obećanja od nekih da bi prezentaciju bili voljni spremiti.

Nakon sastanka Dragan i ja odosmo, ……. ovo je već druga tema pa možda se u jednom budućem blog postu i napiše šta to bi poslije sastanka Smile.