[EN] This is in Czech
[CZ] Jednotkové testy snadno a rychle dík využití těch správných nástrojů - Mockito, DbUnit, Groovy aj. Opomíjené přínosy testů. Bonus: TDD a mutační testování.
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015angular-cz
JavaScript je jazyk, se kterým se všichni občas potkáme, ale ne vždy se chová tak, jak bychom očekávali. Na první pohled vypadá kód v JS podobně jako v jiných jazycích, ale výsledek jeho spuštění je často jiný. Pojďme si projít odlišnosti jazyka a konstrukce, které často působí problémy a nedorozumnění. Přednášet bude Milan Lempera a Víťa Plšek (angular.cz)
Ukážeme si, že Doctrine není jenom ORMko a kdy jít o vrstvu níž. Jak DQL naučit věci, které v základu neumí, ale vaše databáze ano. A pár dalších tipů, jak nemít z databáze úplně hloupé úložiště.
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
Ukážeme si, že Doctrine není jenom ORMko a kdy jít o vrstvu níž. Jak DQL naučit věci, které v základu neumí, ale vaše databáze ano. A pár dalších tipů, jak nemít z databáze úplně hloupé úložiště.
Pokusil jsem se dát dohromady základní přehled častých chyb, na které člověk v různých webových aplikacích narazí.
Zároveň také otevírám téma striktnosti práce s typy a hodnotami, které se často ignoruje, ale každá opravdu solidní aplikace jej musí řešit.
[EN] This is in Czech
[CZ] Jednotkové testy snadno a rychle dík využití těch správných nástrojů - Mockito, DbUnit, Groovy aj. Opomíjené přínosy testů. Bonus: TDD a mutační testování.
Na co si dát v Javascriptu pozor? - Barcamp Hradec Králové 2015angular-cz
JavaScript je jazyk, se kterým se všichni občas potkáme, ale ne vždy se chová tak, jak bychom očekávali. Na první pohled vypadá kód v JS podobně jako v jiných jazycích, ale výsledek jeho spuštění je často jiný. Pojďme si projít odlišnosti jazyka a konstrukce, které často působí problémy a nedorozumnění. Přednášet bude Milan Lempera a Víťa Plšek (angular.cz)
Ukážeme si, že Doctrine není jenom ORMko a kdy jít o vrstvu níž. Jak DQL naučit věci, které v základu neumí, ale vaše databáze ano. A pár dalších tipů, jak nemít z databáze úplně hloupé úložiště.
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
Ukážeme si, že Doctrine není jenom ORMko a kdy jít o vrstvu níž. Jak DQL naučit věci, které v základu neumí, ale vaše databáze ano. A pár dalších tipů, jak nemít z databáze úplně hloupé úložiště.
Pokusil jsem se dát dohromady základní přehled častých chyb, na které člověk v různých webových aplikacích narazí.
Zároveň také otevírám téma striktnosti práce s typy a hodnotami, které se často ignoruje, ale každá opravdu solidní aplikace jej musí řešit.
Martin Dráb – Zranitelnosti ovladačů jádra Windows v praxi
Obzvláště 64bitové verze OS Windows obsahují silné mechanismy zamezující vykonávání škodlivého kódu v režimu jádra. Cílem přednášky je ukázat, že tato opatření nemusí být vůbec efektivní, pokud autoři ovladačů udělají při programování chybu. Tento fakt bude demonstrován ukázkou zneužití takové chyby, která dovolí útočníkovi vykonat libovolný kód se stejným oprávněním jako ovladač jádra.
www.security-session.cz
node.js: zápisky z fronty (Battle guide to node.js)almadcz
[czech] V Apiary používáme node.js v produkci už přes rok.
Proč se zamyslet nad tím, zda ho chcete? A na co se připravit a na co si dát pozor, pokud se do toho pustíte?
5. Nejvyšší úroveň
◦ Váš kód vás přežije
The Art of Commputer
Programming OOP
No comment ;)
TeX
Windowing GUI
Dijkstra Knuth Kay
6. Světově známí a vybudovali úspěšný byznys
◦ The real freedom zero
Doom | Quake | … RoR | 37 Signals No comment ;)
Carmack Hansson Gates
7. Známí v programátorských kruzích
◦ Slavný je dobrý, ale úspěšný je lepší
Většinou pracují pro velké a dobře známé
korporace nebo jsou členy startup týmů
8. Úspěšná kariéra softwarových vývojářů
Výborné skills
◦ Nemají problém sehnat práci
◦ Firmy je berou „všema deseti“
Ale co dál? Kam se odtud posunout?
9. Dost dobrý programátor, který ale není
vynikající programátor
◦ A možná ani nikdy nebude
◦ Většinou chybí talent na kódování
10. Rádi kódují
Ukazují své projekty
Věnují programování hodně volného času
Mohou se rychle přesunout do skupiny
pracujících programátorů
11. Typický programátor – Jan Kodér
Obvykle pracuje v rámci velké „anonymní“
společnosti
Programování je jejich práce, ne „celý jejich
život“
12. Spadli do programátorské role ani nevědí jak.
◦ A to bez předchozích znalostí a zkušeností
Vše, na co sáhnou, se stává utrpením pro
ostatní spolupracovníky (programátory) –
možná s výjimkou jiných špatných
programátorů.
16. Nejlepší kód je „žádný“ kód!
http://goo.gl/87XHC
17. Nejlepší kód je „žádný“ kód!
◦ Jako softwaroví vývojáři jste svým vlastním
nejhorším nepřítelem.
18. Nejlepší kód je „žádný“ kód!
◦ Kód lze hodnotit z mnoha úhlů pohledů:
Stručnost
Plná funkcionalita
Rychlost
Čas strávený kódováním
Robustnost
Flexibilita
if (s == String.Empty) vs. if (s == “”)
19. Komentáře!
◦ Ne co
◦ Ne jak
◦ Ale proč
„to write good comments you have to be a good writer“
22. Pascal casing
◦ První písmeno každého slova velkým písmenem
◦ Nepoužívají se podtržítka
DruhaMocnina
◦ Pro většinu identifikátorů
Camel casing
◦ První písmeno malé; druhé a další slova začínají
velkým písmenem.
druhaMocnina
◦ Parametry metod, lokální proměnné, soukromé
datové složky třídy
23. Prostory jmen
◦ Hlavní namespace – název společnosti
◦ Vnořený namespace – název projektu (aplikace)
Názvy identifikátorů se uvádějí bez prefixu
◦ Kromě rozhrání s prefixem I, např. Idisposable
◦ Například název třídy by neměl být CDog nebo TDog,
ale jen Dog
24. Zkratky a akronymy
◦ Malými písmeny – první znak však závisí na typu
identifikátoru
htmlControl – pro soukromé složky
HtmlControl – pro ostatní složky
◦ Výjimka – dvouznaké zkratky jsou velkými písmeny
kromě těch, které jsou na začátku identifikátoru a mají
být psány velbloudím stylem
DBCommand – veřejná složka
dbCommand – soukromá složka
V .NET není pevně dodrženo (DbConnection)
25. Více viz MSDN knihovna a téma
„Guidelines for Names“
http://goo.gl/179I1
26. Posloupnost písmen a číslic
začínající písmenem.
◦ „Písmeno“ – jakýkoliv znak
z UNICODE
Rozlišují se malá a velká
písmena
Na začátek lze přidat znak @
◦ @do vs. do
Klíčové
slovo
31. Příklady
int i, j = 11, k = 5;
const int m = 10, n = 20;
n je také
konstanta
32. Rozdíly oproti C++
◦ Modifikátor const lze použít pro předdefinované
(základní) datové typy. U referenčních typů (třídy)
jej lze použít pouze tehdy, pokud je proměnná
inicializována hodnotou null.
◦ Překladač nedovolí použít proměnnou jež nebyla
inicializována.
◦ Ve vnořeném bloku nelze deklarovat proměnnou
stejného jména jako v bloku nadřezeném.
33. Rozdíly oproti C++
◦ Mezi prostorem jmen a identifikátorem a mezi
vnořeným a nadřazeným prostorem jmen se uvádí
tečka.
◦ Pro složky prostorů jmen lze uvést přístupová
práva.
34. Deklarace
namespace jméno { direktiva_using(nep)
deklarace_složek }
◦ jméno – název prostoru jmen
◦ direktiva_using – direktiva using (viz dále)
◦ deklarace_složek – deklarace datových typů (tříd, struktur,
výčtových typů, …)
35. Deklarace vnořeného prostoru jmen
◦ Způsob 1
namespace Vnější
{
namespace Vnitřní
{
class X {}
}
}
36. Deklarace vnořeného prostoru jmen
◦ Způsob 2 (v C++ neexistuje)
namespace Vnější.Vnitřní
{
class X {}
}
V obou případech se mimo prostor jmen
k X přistoupí způsobem Vnější.Vnitřní.X
37. Přístupová práva
◦ public – datový typ je veřejně přístupný, lze jej
použít i v jiných sestaveních
◦ internal – datový typ lze použít pouze v
sestavení, ve kterém je deklarován
internal je výchozí – automaticky doplněno
překladačem, pokud není specifikováno jinak
38. Syntaxe deklarace
◦ using jméno_prostoru_jmen;
◦ using alias = jméno_prostoru_jmen;
◦ using alias = jméno_typu;
Direktiva using musí předcházet všem deklaracím
v prostoru jmen.
39. Syntaxe deklarace
◦ using jméno_prostoru_jmen;
Slouží k specifikaci prostoru jmen, jehož identifikátory se
nemusí v programu klasifikovat jménem tohoto prostoru.
Při použití using System; lze psát rovnou
Console.Writeline(); protože Console je
součástí prostoru jmen System.
◦ Nelze však psát File.Create(“data.txt“); ani
IO. File.Create(“data.txt“);
PROČ?
40. Syntaxe deklarace
◦ using jméno_prostoru_jmen;
Slouží k specifikaci prostoru jmen, jehož identifikátory se
nemusí v programu klasifikovat jménem tohoto prostoru.
Při použití using System; lze psát rovnou
Console.Writeline(); protože Console je
součástí prostoru jmen System.
◦ Nelze však psát File.Create(“data.txt“); ani
IO. File.Create(“data.txt“);
PROČ?
File leží v prostoru jmen
System.IO, a ten není
direktivou using
zpřístupněn.
41. Syntaxe deklarace
◦ using alias = jméno_prostoru_jmen;
Slouží k jinému pojmenování existujícího prostoru jmen.
alias – nové jméno prostoru jmen
jméno_prostoru_jmen – původní označení prostoru jmen
using VV = Vnější.Vnitřní;
Ke složce X pak lze přistoupit přes: VV.X.
42. Obdoba typedef
z C++
Syntaxe deklarace
◦ using alias = jméno_typu;
Slouží k nového jména pro daný typ.
alias – nové jméno typu
jméno_typu – původní označení typu
using VVX = Vnější.Vnitřní.X;
Nelze přejmenovat klíčové slovo:
◦ using cela = int;
Lze však napsat: Typ int je jiné
◦ using cela = System.Int32; označení pro
Int32 v prostoru
jmen System
43. namespace alias qualifier
Používá se ve spojení s klíčovým slovem
global nebo ve spojení s aliasem prostoru
jmen.
global lze využít ke zpřístupnění složky
z globálního prostoru jmen, která je zastíněna
jiným jmenným prostorem.
Obdoba unárního rozlišovacího operátoru ::
z C++
44. namespace GlobalniProstorJmen
{
class System { }
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Text");
global::System.Console.WriteLine("Text");
global::System.Console.ReadKey();
}
}
}
45. V C# je rozdíl mezi strukturami a třídami o
poznání větší než v C++.
Syntaxe
◦ Modifikátor(nep) struct jméno specifikace_rozhraní(nep) {
složky(nep) } ;(nep)
modifikátor – přístupová práva.
jméno – identifikátor datového typu dané struktury, který
tato deklarace zavádí.
specifikace_rozhraní – rozhraní, která tato struktura
implementuje (viz dále).
složky – seznam složek struktury (datové
složky, metody, přetížené
operátory, konstruktory, vlastnosti, události a vnořené
typy).
46. Rozdíly mezi třídami a strukturami
◦ Struktury patří mezi hodnotové typy, třídy mezi
referenční typy. Hodnotové typy se vytvářejí
v zásobníku, referenční na haldě.
◦ Všechny struktury jsou potomkem třídy
System.ValueType, která je odvozena od třídy
object. V deklaraci nelze specifikovat předka a
od struktury nelze odvodit potomka.
47. Rozdíly mezi třídami a strukturami
◦ Struktury nemohou mít destruktor.
◦ Struktury nemohou mít uživatelem definovaný konstruktor
bez parametrů.
◦ Konstruktor struktury musí inicializovat všechny její datové
složky.
Překladač automaticky vytváří implicitní konstruktor, který
inicializuje všechny datové složky na hodnotu 0, false nebo
null.
48. Vytvoření instance
◦ Pomocí operátoru new
◦ Inicializací všech datových složek struktury
struct Bod
{
public double x, y;
public Bod(double x, double y)
{
this.x = x;
this.y = y;
}
}
49. Vytvoření instance
◦ Bod a = new Bod();
K jednotlivým
datovým
◦ Bod b = new Bod(30, 40); složkám lze
přistoupit přes
tečku
(a.x, a.y, b.x, b.y).
Jaké budou
jejich hodnoty?
50. Vytvoření instance
Identifikátory
◦ Bod a = new Bod();
a, b nejsou
a.x = 0, a.y = 0
ukazatelé.
◦ Bod b = new Bod(30, 40);
Operátor new u
struktury
b.x = 30, b.y = 40 nepředstavuje
dynamickou alokaci
paměti.
Jedná se o instance.
51. Bod c;
Nevolá se konstruktor.
c.x = 10;
c.y = 20; Složky lze inicializovat samostatně
int v = c.x + c.y;
OK
52. Think about your users and
their needs before you start
building the code, and they’ll
be happy with the final
product once you’re done!