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ě.
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ě.
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ě.
Jak přemigrovat Slevomat na Doctrine za jedno dopoledneJosef Kříž
Rady, tipy a zkušenosti, které jsem nasbíral při migraci velkého projektu na Doctrine ORM. Ukážeme si, že přechod nemusí nutně znamenat přepis celé aplikace.
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Péhápkaři
90 % webových aplikací funguje stylem "získám uživatelská data, uložím si je do nějakého storage a pak si je prohlédnu na bezpečné stránce". Se Symfony 3 je tohle otázka pár minut.
28. července 2014 jsme začali po částech přepisovat Jobs.cz z interního frameworku do Symfony. Pokud i vy plánujete přepisovat aplikaci do Symfony, mohlo by vás zajímat, co jsme se za uplynulý rok a čtvrt naučili - na čem jsme si vylámali zuby, co bychom znovu udělali jinak a co se nám naopak vyplatilo.
Video: https://www.youtube.com/watch?v=u6PA7EUO0WA
PDR Presentation with Updated Requirements Slides.pptxTristan Roberts
The University of Arizona Hyperloop team aims to optimize the compressor and air bearing systems for a hyperloop pod design. Their objective is to study and present their design at the competition but they will not build a full pod. They have selected a two stage axial compressor design using nickel alloy blades and titanium casing. Their compressor modeling so far has been limited and they plan to switch to SolidWorks for more detailed simulation.
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Péhápkaři
MS děláme v MALLu asi 2 roky a máme za tu dobu cca 20 MS a poměrně výrazně rozebranej původní monolit. Budu mluvit hlavně o nástrojích, které je pro MS nutné mít.
Carlos Navas has over 10 years of experience as a senior operating engineer responsible for facilities maintenance. He served 8 years in the US Navy as a gas turbine mechanic, where he was responsible for scheduling, tracking, and managing repairs and maintenance of power generation and distribution systems. He is now a senior operating engineer at JLL responsible for 8 administrative sites in the Bay Area. Navas seeks a position where he can utilize his leadership, training, maintenance, and operations experience.
RFM analýza patří k základním metodám segmentace zákazníků. Je poměrně jednoduchá na pochopení i přípravu, kdokoliv si ji může během půl hodiny udělat třeba i v Excelu. Přesto o ní řada webů a e-shopů neví nebo ji nepoužívá. V průběhu přednášky si ukážeme, o co vlastně jde a jak RFM segmentaci připravit. Na řadě konkrétních příkladů si pak demonstrujeme, jak ji využít ve svém marketingu, e-mailingu, remarketingu či zákaznické komunikaci.
Jak přemigrovat Slevomat na Doctrine za jedno dopoledneJosef Kříž
Rady, tipy a zkušenosti, které jsem nasbíral při migraci velkého projektu na Doctrine ORM. Ukážeme si, že přechod nemusí nutně znamenat přepis celé aplikace.
Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)Péhápkaři
90 % webových aplikací funguje stylem "získám uživatelská data, uložím si je do nějakého storage a pak si je prohlédnu na bezpečné stránce". Se Symfony 3 je tohle otázka pár minut.
28. července 2014 jsme začali po částech přepisovat Jobs.cz z interního frameworku do Symfony. Pokud i vy plánujete přepisovat aplikaci do Symfony, mohlo by vás zajímat, co jsme se za uplynulý rok a čtvrt naučili - na čem jsme si vylámali zuby, co bychom znovu udělali jinak a co se nám naopak vyplatilo.
Video: https://www.youtube.com/watch?v=u6PA7EUO0WA
PDR Presentation with Updated Requirements Slides.pptxTristan Roberts
The University of Arizona Hyperloop team aims to optimize the compressor and air bearing systems for a hyperloop pod design. Their objective is to study and present their design at the competition but they will not build a full pod. They have selected a two stage axial compressor design using nickel alloy blades and titanium casing. Their compressor modeling so far has been limited and they plan to switch to SolidWorks for more detailed simulation.
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Péhápkaři
MS děláme v MALLu asi 2 roky a máme za tu dobu cca 20 MS a poměrně výrazně rozebranej původní monolit. Budu mluvit hlavně o nástrojích, které je pro MS nutné mít.
Carlos Navas has over 10 years of experience as a senior operating engineer responsible for facilities maintenance. He served 8 years in the US Navy as a gas turbine mechanic, where he was responsible for scheduling, tracking, and managing repairs and maintenance of power generation and distribution systems. He is now a senior operating engineer at JLL responsible for 8 administrative sites in the Bay Area. Navas seeks a position where he can utilize his leadership, training, maintenance, and operations experience.
RFM analýza patří k základním metodám segmentace zákazníků. Je poměrně jednoduchá na pochopení i přípravu, kdokoliv si ji může během půl hodiny udělat třeba i v Excelu. Přesto o ní řada webů a e-shopů neví nebo ji nepoužívá. V průběhu přednášky si ukážeme, o co vlastně jde a jak RFM segmentaci připravit. Na řadě konkrétních příkladů si pak demonstrujeme, jak ji využít ve svém marketingu, e-mailingu, remarketingu či zákaznické komunikaci.
The document summarizes a presentation on incorporating debate into English language teaching. It discusses what debate is, the skills it helps develop, how to design a debate-focused syllabus, and tips for structuring classroom debates. Debate involves arguing for or against a resolution and helps improve students' critical thinking, research, public speaking and listening skills. The presentation provides examples of debate topics and structures for classroom debates, as well as suggestions for supporting arguments and developing counterarguments.
The document discusses different genres of speculative fiction including science fiction, fantasy, horror and their defining elements. It explores how these genres allow authors to highlight themes like humanity, courage/fear through settings and characters that are not confined by realism. The document argues that speculative fiction reconnects readers with wonder and spirituality by touching on deep instincts through astonishing tales.
Presentation from training day for Sun Solaris customers to explain features of Solaris DTrace.
Presentation covers following themes:
- architecture and syntax
- tools DTraceToolkit, chime, DTraceTazTool, DLight
- system DTrace (system providers like syscall, sched, vminfo ...)
- application DTrace (providers pid* and plockstat*, User-Level Statically Defined Tracing (USDT)), Dtrace for MySQL, Apache webserver, PHP module, Java and Firefox Javascript
Czech Oracle Solaris Administrators Day 2011 - DTrace Martin Cerveny
Presentation from training day for Oracle Solaris customers to explain features of Solaris DTrace.
Presentation covers following themes:
- architecture and syntax
- tools DTraceToolkit, chime, DTraceTazTool, DLight
- system DTrace (system providers like syscall, sched, vminfo ...)
- application DTrace (providers pid* and plockstat*, User-Level Statically Defined Tracing (USDT)), Dtrace for MySQL, Apache webserver, PHP module, Java and Firefox Javascript
Demolabs: http://www.edumaster.cz/java-developers-solaris-administrators-day/pdf/jsd2011_dtrace_labs.tar.gz
Přednáška pokrývá úvod do mírně pokročilých oblastí vývoje pro iOS.
- vícevláknové programování
- práce s XML a JSON na iOS
- datová persistence
- MapKit a Core Location
- Systémové dialogy
- URL schémata
The document discusses the SOLID principles of object-oriented design:
- Single Responsibility Principle (SRP): A class should have one, and only one, reason to change. Symptoms include a class with multiple responsibilities or dependencies.
- Open Closed Principle (OCP): A class should be open for extension but closed for modification. New functionality should not require changing existing code.
- Liskov Substitution Principle (LSP): Derived classes must be substitutable for their base classes.
- Interface Segregation Principle (ISP): Interfaces should be specific to the client and not contain methods that the client doesn't use.
- Dependency Inversion Pr
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Péhápkaři
"Zkoušel jsem si super-hyper-cool technologii a tak trošku nemohu na počı́tači nic dělat. Reinstalace?“
Jak řešit tyto situace ve velkém týmu elegantně?
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...Péhápkaři
Mám radši, když se mě někdo zeptá na něco konkrétního a ja to můžu zkusit nějak zodpovědet . S delší diskuzí, protože to je takový multipravdový téma.
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Péhápkaři
This document discusses using Monit to monitor and manage processes and servers. It introduces Monit and its configuration file to define checks, start/stop programs, groups, and dependency tests. It also covers Monit commands for starting, stopping, and reloading processes by name or group. The goal is to help prevent servers from burning out by automatically restarting processes that fail health checks.
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Péhápkaři
Máte problémy s výkonem vašich aplikací? Pomalé načítání stránek obtěžuje vás i uživatele? Testujte výkonnost PHP aplikací pomocí Blackfire.io nástroje od SensioLabs.
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)Péhápkaři
Může Laravel obstát v konkurenci Zendu a Symfony? Je konvence nad konfigurací skutečně výhoda? A co teprve ve spojení s WordPress v roli headless CMS? Toto všechno z pohledu posedlého front-end developera.
Tomáš Fejfar - Elk - Víc než jen logy (4. sraz přátel Symfony v Praze)Péhápkaři
Jakmile máte větší aplikaci rozdělenou na více workerů nebo oddělené microservices běžící jako samostatné aplikace brzy se přestanete orientovat v množství logů, které servery generují. Navíc co se nedá měřit, to se nedá řídit. A logy se měřit dají. A já vám ukážu jak.
4. Minimum využití databáze každého Doctrinisty
● Co za vás dělá Doctrine
○ indexy pro vazby a primární klíče
○ vzdálené klíče
● Co si musíte pohlídat sami
○ unique indexy
○ vlastní typy
5. Indexy a vzdálené klíče
class User {
/**
* @ORMId()
* @ORMColumn(type="uuid")
*/
private $id;
class Order {
/**
* @ORMManyToOne(targetEntity=User::class)
* @ORMJoinColumn(nullable=false)
*/
private $user;
8. Unique indexy: vkládání a race conditions
● Opravdu to potřebujete řešit?
○ >90% aplikacím stačí check přes repository před flushem
○ >90% aplikací nikdy nenaroste natolik, aby to byl skutečný problém
● Pokud to opravdu opravdu potřebujete řešit
○ kdyby/doctrine ... NonLockingUniqueInserter
○ ^ brzy i samostatně, jako kdyby/doctrine-nonlocking-unique-inserter
○ ^ Symfony friendly ❤
○ ^ sledujte issue kdyby/doctrine#238
9. Vlastní datový typ
class UuidType extends Type {
const NAME = 'uuid';
function getName() { return self::NAME; }
function getSQLDeclaration(
array $fieldDeclaration, AbstractPlatform $platform);
function convertToPHPValue(
$value, AbstractPlatform $platform);
function convertToDatabaseValue(
$value, AbstractPlatform $platform);
Zdroj: ramsey/uuid-doctrine
10. Vlastní datový typ: komentáře ve schématu
class SomethingBasedOnStringType extends StringType {
function requiresSQLCommentHint(
AbstractPlatform $platform) : bool
// …
$platform->markDoctrineTypeCommented(Type::getType($type));
11. Vlastní datový typ: konverze na úrovni DB
class GeometryType extends Type {
function canRequireSQLConversion() : bool;
function convertToDatabaseValueSQL(
$sqlExpr, AbstractPlatform $platform);
function convertToPHPValueSQL(
$sqlExpr, $platform);
16. Batch operace s DQL
“UPDATE/DELETE statements are ported directly into a Database statement and
therefore bypass any locking scheme, events and do not increment the
version column. Entities that are already loaded into the persistence context will
NOT be synced with the updated database state. It is recommended to call
EntityManager#clear() and retrieve new instances of any affected entity.”
~ Dokumentace
17. Batch operace s DQL
● Zkuste nejprve chytřejší způsoby iterace nad výsledkem
○ ORMQuery::iterate();
○ Stránkování
● Raději DQL update, než SQL update
● Neumí JOINy :(
22. Rozšiřování DQL
● TreeWalker - může modifikovat AST
● output SqlWalker - generuje samotný SQL dotaz
● vlastní funkce
23. Rozšiřování DQL: limitace
● Gramatika je jasně definovaná, není možné to nijak ohackovat
● Tree Walker může modifikovat výsledné AST, ale opět nezmění gramatiku
● SqlWalker to nemá jak zachránit
24. Rozšiřování DQL: co jde
Kam nemůže DQL
SELECT order.finishedTime IS NULL AS something
FROM ...;
Tam musí funkce
SELECT IS_NULL(order.finishedTime) AS something
FROM ...;
25. Rozšiřování DQL: vlastní funkce
class IsNull extends FunctionNode {
private $expression;
public function getSql(SqlWalker $sqlWalker) {
return $sqlWalker->walkArithmeticPrimary($this->expression) . ' IS NULL';
}
public function parse(Parser $parser) {
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->expression = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
26. SELECT employee,
AVG(salary) OVER (PARTITION BY employee.department) AS avgSalary
FROM MyEmployee employee;
SELECT employee,
WINDOW_OVER(AVG(salary), employee.department) AS avgSalary
FROM MyEmployee employee;
SELECT employee,
WINDOW(AVG(salary) OVER (PARTITION BY employee.department)) AS avgSalary
FROM MyEmployee employee;
Rozšiřování DQL: komplexnější syntaxe
32. Shrnutí: co si z toho odnést?
● Logika v modelu dokud to jenom trochu jde
● Nebát se využívat hojně vlastní typy
● Rozšiřování DQL je snadné
● Doctrine není určená na batch operace
Kam dál?
● Youtube kanál “Nette Framework” > search “Doctrine”