O tworzeniu rozwiza mobilnych z punktu widzenia front-end dewelopera. Om坦wienie istniejcych rozwiza oraz gbsza analiza biblioteki NativeScript wraz z demem.
Demo #1: https://github.com/pawelkondraciuk/nativescript-hello-world-demo-1
Demo #2: https://github.com/pawelkondraciuk/sample-groceries-demo-2
Franciszek Krasowski: Zastanawialicie si kiedy nad tym, czym jest PHP-PM? Jak dziaa? Jak wypada w por坦wnaniu do innych popularnych rozwiza? Czy jest wystarczajco stabilny? Franciszek Krasowski odpowie na wszystkie te pytania (a tak甜e na te, kt坦rych jeszcze nie zadalicie).
Dziesi serwer坦w poprosz!, czyli co mo甜e Ci zaoferowa definiowanie infra...The Software House
油
Niezale甜nie od tego, czy jestecie developerami, sysadminami, czy te甜 DevOps Engineers prawie na pewno mielicie dowiadczenie z webowymi panelami dostawc坦w usug infrastrukturalnych takich jak AWS, GCP czy te甜 OVH. Z poziomu tych paneli da si wyklika wszystko, czego potrzeba, ale czy aby na pewno tdy droga? rodowiskiem bardziej naturalnym dla ka甜dego in甜yniera jest wszak甜e edytor tekstu (czy te甜 IDE) oraz r坦甜norakie polecenia wydawane komputerowi w formie skrypt坦w. Czemu by wic z tego nie skorzysta? Jeli od klikania bez mo甜liwoci pomyki boli Was rka, zainwestuj w podkadk pod mysz ale przede wszystkim wpadnij na prelekcj Piotra, na kt坦rej to opowie o zao甜eniach podejcia IaC, jego zaletach oraz przedstawi najpopularniejsze narzdzia.
Adrian Chlubek: Czy PHP jest gotowy na websockety? Czy architektura samego jzyka nie stoi na przeszkodzie? Zobaczymy jakie mamy mo甜liwoci pracy z Websocketami, por坦wnamy trzy popularne rozwizania umo甜liwiajce tak komunikacj, a nastpnie odpowiemy sobie na pytanie czy to ma sens?
Nowe, pot甜ne narzdzia do tworzenia stron internetowych pojawiaj si niemal codziennie. My w zespole postanowilimy jednak cofn si o krok i postawi na to co proste, ale u甜yteczne. Efekt? Korzyci dla zespou i dla klienta. Podczas prezentacji opowiem o tym, co zyskalimy oraz wprowadz suchaczy w wiat Hugo nowoczesnego generatora stron statycznych.
Adrian Chlubek: Dowiemy si, czym jest Swoole, w jakim celu zosta stworzony i jakie funkcjonalnoci oferuje wszystko to na 甜ywych przykadach. Przede wszystkim jednak spr坦bujemy odpowiedzie sobie na pytanie: czy u甜ywanie Swoole ma sens?
Repozytorium z przykadami: https://github.com/achlubek/swoole_experiments
Dokumentacja Swoole: https://www.swoole.co.uk/docs/
LocalStack to framework udostpniajcy atwe w u甜yciu mocki usug stosu AWS. Podczas prezentacji Maciej skorzysta z serwisu zbudowanego z u甜yciem serverlessowego Boilerplate autorstwa The Software House oraz skorzysta z takich usug AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Nastpnie om坦wi podejcie do testowania rozwizania. Dziki prezentacji mo甜ecie pozna wady i zalety LocalStack. A na koniec Maciej pokazuje przepyw testowy w GitHub Actions, kt坦ry zwikszy pewno przyszych zmian.
Laravel Pozna Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
油
Prezentacja, kt坦ra miaa miejsce 2018-04-25 w Poznaniu. Wykonanie: Marek Tenus (HighSolutions).
Jak zainstalowa i skonfigurowa Dockera? Czym si r坦甜ni od innych rozwiza? Jakie s korzyci z korzystania z Dockera?
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tkaMarcin Gajda
油
Narzdzia takie jak Grunt i Gulp s coraz czciej wypierane z u甜ycia przez swojego nastpce, webpacka. Wynika to z prostego powodu w kwestii pakowania asset坦w rozwizuje on domylnie wiele problem坦w, z kt坦rymi tamte narzdzia radz sobie gorzej. Ta prezentacja omawia te zagadnienia i pokazuje jak skonfigurowa webpacka od zera.
Czym tak naprawd jest deployment, co mo甜e p坦j nie tak i w jaki spos坦b mo甜emy si przed tym zabezpieczy, korzystajc z Kubernetesa i jego ekosystemu. Zaczniemy od tego, jakie s rodzaje deployment坦w, po czym wspomnimy dlaczego nale甜y uwa甜ac z healthcheckami. Czym jest Circuit Breaker i jak mo甜e nam pom坦c? Jak wyglda Canary Analysis w praktyce? Odpowiedzi na te wszystkie pytania z pewnoci sprawi, 甜e przycisk Deploy To Production przestanie by taki straszny.
Wykad ze styczniowego spotkania grupy UW@IT pt. "Ansible w praktyce".
Ansible jest narzdziem wykorzystywanym do automatyzacji codziennych dziaa zwizanych z tworzeniem oraz utrzymaniem infrastruktury IT.
Docker jest wspania technologi. Przy pomocy Dockera w prosty spos坦b mo甜emy rozwiza jeden problem, a na jego miejsce stworzy dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyn jest architektura Dockera? Brak zrozumienia? A mo甜e co wicej?
Testy wydajnociowe to nie tylko JMeter. Podobnie jak w przypadku test坦w automatycznych, liczba framework坦w do badania wydajnoci stale ronie. Poza wprowadzeniem w tematyk test坦w wydajnociowych, w trakcie prezentacji przyjrzymy si ich implementacji we frameworku k6. Opowiemy r坦wnie甜 dlaczego w The Software House postawilimy na jego wyb坦r i jak dziki prostym skryptom testowym zoptymalizowalimy kilka naszych projekt坦w.
Prezentacja bdzie zawieraa lu添ne anegdoty i dowiadczenia z u甜ywania kontener坦w dockera w produkcji, r坦wnie甜 do hostowania aplikacji PHP. Sposoby budowania kontener坦w, typowe problemy deploymentu.
Trudne jest zarzdzanie wasn infrastruktur. Troch prociej jest u甜y chmury, jednak wci甜 czeka nas sporo konfiguracji. A co, gdyby wszystkie potrzebne usugi skonfiguroway si same, a nam pozostao tylko dogldanie caoci? AWS Elastic Beanstalk umo甜liwia zautomatyzowane skonfigurowanie rodowiska w chmurze AWS pod konkretne aplikacje. Mo甜na dziki niemu wygodnie uruchomi Dockerowe kontenery i wanie tym zajmiemy si na prezentacji. Opowiemy pokr坦tce jak dziaa Beanstalk i przeprowadzimy deployment przykadowego programu). I to wszystko bez zastanawiania si nad infrastrukturalnymi szczeg坦ami.
Core Web Vitals to metryki przygotowane przez Google w celu pomiaru wydajnoci aplikacji oraz User Experience. S one skadowymi wyniku Performance obliczanego przez narzdzie Lighthouse. W swojej prezentacji Marcin przybli甜y temat poszczeg坦lnych metryk, a nastpnie na kilku przykadach postaram si zaprezentowa problemy wpywajce na ni甜szy wynik oraz jak sobie z nimi poradzi. Cao prezentacji opiera si bdzie na prostej aplikacji Next.js, kt坦rej wynik bdziemy stara si poprawi, korzystajc z kilku ciekawych narzdzi.
How to run system administrator recruitment process? By creating platform based on open source parts in just 2 nights! I gave this talk in Poland / Krak坦w OWASP chapter meeting on 17th Octomber 2013 at our local Google for Entrepreneurs site. It's focused on security and also shows how to create recruitment process in CTF / challenge way.
This story covers mostly security details of this whole platform. There's great chance, that I will give another talk about this system but this time focusing on technical details. Stay tuned ;)
DynamoDB jest z nami od du甜szego czasu i pomimo rosncej popularnoci dla czci z nas logika kryjca si za DynamoDB nie wydaje si by jasna. Wymaga od nas zmiany mylenia o strukturze danych, zmiany naszych przyzwyczaje oraz dostosowania si do mocno wyznaczonych regu. W swojej prezentacji Marcin postara si wytumaczy skd bior si r坦甜nice pomidzy dobrze nam znanym wiatem SQL a wiatem NoSQL. Opowie r坦wnie甜 o tym, jak zacz modelowanie tabel oraz czym s i do czego su甜 GSI.
Laravel Pozna Meetup #3 - Uruchomienie i praca z Laravel w wirtualnym konten...HighSolutions Sp. z o.o.
油
Prezentacja, kt坦ra miaa miejsce 2018-04-25 w Poznaniu. Wykonanie: Marek Tenus (HighSolutions).
Jak zainstalowa i skonfigurowa Dockera? Czym si r坦甜ni od innych rozwiza? Jakie s korzyci z korzystania z Dockera?
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tkaMarcin Gajda
油
Narzdzia takie jak Grunt i Gulp s coraz czciej wypierane z u甜ycia przez swojego nastpce, webpacka. Wynika to z prostego powodu w kwestii pakowania asset坦w rozwizuje on domylnie wiele problem坦w, z kt坦rymi tamte narzdzia radz sobie gorzej. Ta prezentacja omawia te zagadnienia i pokazuje jak skonfigurowa webpacka od zera.
Czym tak naprawd jest deployment, co mo甜e p坦j nie tak i w jaki spos坦b mo甜emy si przed tym zabezpieczy, korzystajc z Kubernetesa i jego ekosystemu. Zaczniemy od tego, jakie s rodzaje deployment坦w, po czym wspomnimy dlaczego nale甜y uwa甜ac z healthcheckami. Czym jest Circuit Breaker i jak mo甜e nam pom坦c? Jak wyglda Canary Analysis w praktyce? Odpowiedzi na te wszystkie pytania z pewnoci sprawi, 甜e przycisk Deploy To Production przestanie by taki straszny.
Wykad ze styczniowego spotkania grupy UW@IT pt. "Ansible w praktyce".
Ansible jest narzdziem wykorzystywanym do automatyzacji codziennych dziaa zwizanych z tworzeniem oraz utrzymaniem infrastruktury IT.
Docker jest wspania technologi. Przy pomocy Dockera w prosty spos坦b mo甜emy rozwiza jeden problem, a na jego miejsce stworzy dwa inne, nowe, bardziej skomplikowane... Co jest powodem takiego stanu rzeczy? Czy przyczyn jest architektura Dockera? Brak zrozumienia? A mo甜e co wicej?
Testy wydajnociowe to nie tylko JMeter. Podobnie jak w przypadku test坦w automatycznych, liczba framework坦w do badania wydajnoci stale ronie. Poza wprowadzeniem w tematyk test坦w wydajnociowych, w trakcie prezentacji przyjrzymy si ich implementacji we frameworku k6. Opowiemy r坦wnie甜 dlaczego w The Software House postawilimy na jego wyb坦r i jak dziki prostym skryptom testowym zoptymalizowalimy kilka naszych projekt坦w.
Prezentacja bdzie zawieraa lu添ne anegdoty i dowiadczenia z u甜ywania kontener坦w dockera w produkcji, r坦wnie甜 do hostowania aplikacji PHP. Sposoby budowania kontener坦w, typowe problemy deploymentu.
Trudne jest zarzdzanie wasn infrastruktur. Troch prociej jest u甜y chmury, jednak wci甜 czeka nas sporo konfiguracji. A co, gdyby wszystkie potrzebne usugi skonfiguroway si same, a nam pozostao tylko dogldanie caoci? AWS Elastic Beanstalk umo甜liwia zautomatyzowane skonfigurowanie rodowiska w chmurze AWS pod konkretne aplikacje. Mo甜na dziki niemu wygodnie uruchomi Dockerowe kontenery i wanie tym zajmiemy si na prezentacji. Opowiemy pokr坦tce jak dziaa Beanstalk i przeprowadzimy deployment przykadowego programu). I to wszystko bez zastanawiania si nad infrastrukturalnymi szczeg坦ami.
Core Web Vitals to metryki przygotowane przez Google w celu pomiaru wydajnoci aplikacji oraz User Experience. S one skadowymi wyniku Performance obliczanego przez narzdzie Lighthouse. W swojej prezentacji Marcin przybli甜y temat poszczeg坦lnych metryk, a nastpnie na kilku przykadach postaram si zaprezentowa problemy wpywajce na ni甜szy wynik oraz jak sobie z nimi poradzi. Cao prezentacji opiera si bdzie na prostej aplikacji Next.js, kt坦rej wynik bdziemy stara si poprawi, korzystajc z kilku ciekawych narzdzi.
How to run system administrator recruitment process? By creating platform based on open source parts in just 2 nights! I gave this talk in Poland / Krak坦w OWASP chapter meeting on 17th Octomber 2013 at our local Google for Entrepreneurs site. It's focused on security and also shows how to create recruitment process in CTF / challenge way.
This story covers mostly security details of this whole platform. There's great chance, that I will give another talk about this system but this time focusing on technical details. Stay tuned ;)
DynamoDB jest z nami od du甜szego czasu i pomimo rosncej popularnoci dla czci z nas logika kryjca si za DynamoDB nie wydaje si by jasna. Wymaga od nas zmiany mylenia o strukturze danych, zmiany naszych przyzwyczaje oraz dostosowania si do mocno wyznaczonych regu. W swojej prezentacji Marcin postara si wytumaczy skd bior si r坦甜nice pomidzy dobrze nam znanym wiatem SQL a wiatem NoSQL. Opowie r坦wnie甜 o tym, jak zacz modelowanie tabel oraz czym s i do czego su甜 GSI.
Testowanie bezpieczestwa aplikacji dedykowanych na platform AndroidSecuRing
油
Celem prezentacji jest zapoznanie suchaczy z metodami badania bezpieczestwa aplikacji przeznaczonych na Androida. Zaprezentowane zostan faktyczne przykady podatnoci znalezionych w trakcie test坦w penetracyjnych. Dodatkowo, om坦wione bd podstawowe narzdzia oraz techniki niezbdne do przeprowadzanych test坦w bezpieczestwa.
This is my presentation about Red Gate SQL Doc that I have presented on one of the meatings of Lodzka Grupa Profesjonalistow IT & .NET. Presentation in Polish.
Podczas prelekcji dowiesz si o co chodzi z RxJS, do czego jest ono przydatne Angularowi. Celem wystpienia jest zaprezentowanie tworzenia oprogramowania zgodnie z paradygmatem programowania reaktywnego.
4Developers 2015: Property-based testing w jzyku Scala - Pawe GrajewskiPROIDEA
油
Pawe Grajewski
Language: Polish
Techniki Test-driven development (TDD) oraz Behavior-driven development (BDD) s dzi powszechnie stosowan metod poprawy jakoci wytwarzanego oprogramowania. Obie zakadaj w swej konstrukcji budow zestawu przypadk坦w testowych, ale stworzenie poprawnego i kompletnego zestawu takich przypadk坦w jest nie lada sztuk. Czsto nie jestemy w stanie przewidzie wszystkich sytuacji brzegowych, w skutek czego nie mo甜emy by pewni na ile w rzeczywistoci poprawny jest kod naszej aplikacji
Z pomoc mo甜e przyj nam technika property-based testing, kt坦ra w miejsce testowania poprawnoci dziaania systemu dla skoczonego zbioru przypadk坦w testowych wprowadza koncepcj badania jego waciwoci. Idea ta zrodzia si ju甜 wiele lat temu, a dzisiaj znowu wraca do ask wraz ze wzrostem popularnoci funkcyjnych jzyk坦w programowania. Zaufao jej ju甜 wiele du甜ych, zo甜onych projekt坦w m.in. projekt kompilatora jzyka Scala oraz framework Akka. Prawidowo zastosowana jest w stanie zapewni wymierne korzyci - zwikszy pokrycie kodu testami, ale przede wszystkim uchroni nas przed wieloma typowymi niedopatrzeniami.
Prezentacja przybli甜y koncepcj property-based testing oraz zademonstruje t technik na przykadach.
Apache Spark to coraz bardziej popularny framework do tworzenia przetwarza Big Data. Gdy wywalaj si executory, zwikszamy ilo pamici. Gdy job wykonuje si zbyt wolno, zwikszamy ilo executor坦w. Zwikszenie iloci zasob坦w to 甜adna optymalizacja i z czasem nasz klaster Hadoop jest w peni utylizowany i nie mo甜na uruchamia kolejnych przetwarza. A przecie甜 da si inaczej! Klaster Hadoop w Allegro to setki job坦w uruchomionych jednoczenie, z czego wikszo to joby Sparkowe. Opowiemy histori kilku z nich i przemiany, kt坦re przeszy. W tym najbardziej spektakularn: od 2500 do 240GB RAM.
8. Agenda
Metaprogramowanie w JS
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Czym jest metaprogramowanie?
Metaprogramming API
Podstawowe symbole
Proxy
9. Czym jest metaprogramowanie?
Czyli kilka s坦w teorii
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Why do JS developers wear glasses?
Because they dont C#
10. De鍖nicja
Czym jest metaprogramowanie?
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Program, kt坦ry tworzy lub mody鍖kuje inny program - metaprogram
Program, kt坦ry mody鍖kuje samego siebie
11. De鍖nicja
Czym jest metaprogramowanie?
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Program, kt坦ry tworzy lub mody鍖kuje inny program - metaprogram
Kompilatory - np. parsowanie i optymalizacja kodu
Transpilery - np. mody鍖kacja kodu 甜eby by zgodny z urzdzeniem
IDE - np. analiza JSDoc
Program, kt坦ry mody鍖kuje samego siebie
Mechanizmy re鍖eksji
12. De鍖nicja
Czym jest metaprogramowanie?
Program, kt坦ry tworzy lub mody鍖kuje inny program - metaprogram
Kompilatory - np. parsowanie i optymalizacja kodu
Transpilery - np. mody鍖kacja kodu 甜eby by zgodny z urzdzeniem
IDE - np. analiza JSDoc
Program, kt坦ry mody鍖kuje samego siebie
Mechanizmy re鍖eksji
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
13. Mody鍖kacja programu innym programem
Czym jest metaprogramowanie?
Program, kt坦ry tworzy lub mody鍖kuje inny program - metaprogram
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
#define true false
#define private public
Robienie zamieszania w C dziki makrom / Zy kod nie zale甜y od jzyka
14. Programowanie re鍖eksyjne
Czym jest metaprogramowanie?
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Introspekcja - czytanie struktury programu
Mody鍖kacja - zmiana struktury programu
Intercesja - wchodzenie pomidzy - zmiana semantyki jzyka/programu
15. Przykady metaprogramowania
Co mo甜emy dziki temu osign?
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
SQL query goes into a bar, walks up to
two tables and asks "Can I join you?"
16. Przeci甜anie operator坦w
Przykady metaprogramowania
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
// Ruby
class X
attr_reader :order
def +(y)
y + 2
end
def <=>(other)
self.order <=> other.order
end
end
instance = X.new
instance + 3 // => 5
// C++
struct X {
int operator+(int y) {
return y + 2;
}
};
int main () {
X instance;
std::cout << instance + 3; // => 5
return 0;
}
18. Obsuga dynamicznych p坦l
Przykady metaprogramowania
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
// PHP
class X
{
public function __get($field)
{
return $field . " value";
}
}
// Ruby
class X
def method_missing(m, *args, &block)
"#{m} value"
end
end
19. Adnotacje i dekoratory
Przykady metaprogramowania
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
// Java
@Entity
public class X {
@Id @GeneratedValue
@Column(name = "id")
private int id;
public X() {}
}
// JavaScript
class X {
@emitOnEnd("someEvent")
doSomething () {
console.log("Something there")
}
}
21. Imitowanie tablicy
Przykady metaprogramowania
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
// PHP
class X implements ArrayAccess
{
public function offsetExists ($o) {}
public function offsetGet ($o) {}
public function offsetSet ($o, $v) {}
public function offsetUnset ($o) {}
}
$instance = new X();
$instance["key"];
$instance[0];
// JavaScript
// Array-like object
const a = {
0: 1,
1: 4943,
2: 2213,
length: 3
}
a[0];
22. Przeci甜anie metod/klas
Przykady metaprogramowania
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
// Ruby
class X
def something
'hello!'
end
end
class X
def somethingElse
'hello 2!'
end
end
instance = X.new
instance.print // => "hello!"
instance.printSomething // => "hello 2!"
// JavaScript
// Works pretty good!
function X () {}
X.prototype.something = function () {
return "hello!"
}
X.prototype.somethingElse = function () {
return "hello 2!"
}
instance = new X()
instance.print() // => "hello!"
instance.printSomething() // => "hello 2!
23. Metaprogramming API
Podstawowe mo甜liwoci w JavaScript
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
I've got a really good UDP joke to tell you,
but I don't know if you'll get it
24. Na co nam pozwala podstawowe API?
Metaprogramming API
Analiza i mody鍖kacja struktury obiekt坦w
Czytanie informacji o funkcjach
Zarzdzanie acuchem prototyp坦w
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
31. Dekoratory klas
Metaprogramming API
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function Serializable (Cls) {
Cls.prototype.toString = function () {
const str = JSON.stringify(this)
return Cls.name + ": " + str
}
}
@Serializable
class Point {
constructor (x, y) {
this.x = x
this.y = y
}
}
const point = new Point(1, 5)
console.log(point.toString())
// "Point: {"x":1,"y":5}"
W klasie dekoratory mog nadpisa klas
lub edytowa jej prototyp w dowolny spos坦b
32. Dekoratory klas: przykad
Metaprogramming API
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
@Entity()
class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
ActiveRecord / ORM
Przykad z TypeORM
https://github.com/typeorm/typeorm
33. Podstawowe symbole
Zmiana semantyki dziaania programu
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
Why do programmers confuse
Halloween with Christmas?
Because OCT 31 = DEC 25.
34. Czym s symbole?
Podstawowe symbole
// Declare standard symbol
const internal = Symbol()
const symbol = Symbol()
symbol == internal // => false
U甜ywane jako unikalna warto
Nie koliduj z innymi typami
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
35. Czym s symbole?
Podstawowe symbole
// Declare standard symbol
const internal = Symbol()
const symbol = Symbol()
symbol == internal // => false
// Prepare example object
const object = {}
// Set up some value in object
object[internal] = "value"
object[internal] + "s" // => "values"
Object.keys(object) // => []
U甜ywane jako unikalna warto
Nie koliduj z innymi typami
Mog by u甜ywane jako klucz obiektu
Ukryte w obiekcie
poza getOwnPropertySymbols i Re鍖ect.ownKeys
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
36. Czym s symbole?
Podstawowe symbole
// Declare standard symbol
const internal = Symbol.for("debug")
const symbol = Symbol.for("debug")
internal == symbol // => true
Symbol.keyFor(internal) // => debug"
Mog mie sw坦j identy鍖kator
Do pobrania przez Symbol.keyFor
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
37. Well-known symbols
Podstawowe symbole
class Something {
// getter in constructor
static get [Symbol.isMagical] () {
return true
}
// getter for instance
get [Symbol.isMagicDone] () {
return "Magic has been done"
}
// method for instance
[Symbol.makeMagic] () {
// Poof!
}
}
Dostpne w przestrzeni Symbol
Przykady Symbol.iterator, Symbol.species
Przypisane do prototypu lub bezporednio
do konstruktora
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
38. Symbol.iterator
Podstawowe symbole
class Range {
constructor (from, to) {
this.from = from
this.to = to
}
*[Symbol.iterator] () {
let i = this.from
while (i <= this.to) {
yield i
i++
}
}
}
const range = [ ...new Range(1, 5) ]
console.log(range) // [ 1, 2, 3, 4, 5 ]
Pozwala na implementacj iteratora
forof loop
spread operator - [ arr ]
Array.from
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
39. Symbol.toPrimitive
Podstawowe symbole
const person = {
name: "John Doe",
[Symbol.toPrimitive] (hint) {
if (hint === "string") {
return this.name
} else if (hint === "number") {
return this.name.length
}
// "default"
return "Hi, I am " + this.name
}
}
`${person}` // => "John Doe"
+person // => 8
person + "" // => "Hi, I am John Doe"
person + 3 // => "Hi, I am John Doe3"
Zmiana zachowania przy zrzucaniu do typu
Rozr坦甜nia prymitywne typy
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
40. Symbol.hasInstance
Podstawowe symbole
const notNode = x => !(x instanceof Node)
class Node {}
class NodeList extends Array {
static get [Symbol.hasInstance] (o) {
const proto = Object.getPrototypeOf(o)
const c = proto.constructor
if (c === NodeList) { return true }
if (!Array.isArray(o)) { return false }
return o.findIndex(notNode) === -1
}
}
const node = new Node()
[ 1 ] instanceof NodeList // => false
[ node ] instanceof NodeList // => true
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
De鍖niuje dziaanie instanceof
Sprawdza czy obiekt jest instancj klasy
Sugar syntax:
obj instanceof Iterable油wyglda油lepiej ni甜:
isIterable(obj) czy Symbol.iterator in obj
41. Symbol.species
Podstawowe symbole
// Standard behavior
class TimeoutPromise extends Promise {}
const self = x => x
const promise = new TimeoutPromise(self)
promise.then(x => x) // => TimeoutPromise
// Modified behavior
class TimeoutPromise extends Promise {
static get [Symbol.species] () {
return Promise
}
}
const self = x => x
const promise = new TimeoutPromise(self)
promise.then(x => x) // => Promise
Zmienia zwracany typ z podstawowych metod
Przydatny jeli chcemy przej do standardu
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
42. Symbol.isConcatSpreadable
Podstawowe symbole
// Standard behavior
const o = {
0: "a",
1: "b",
length: 2
}
[ 1 ].concat(o) // => [ 1,{0:"a",1:"b"} ]
// Modified behavior
const o = {
0: "a",
1: "b",
length: 2,
[Symbol.isConcatSpreadable]: true
}
[ 1 ].concat(o) // => [ 1, "a", "b" ]
De鍖niuje zachowanie funkcji concat
Decyduje czy obiekt ma by spaszczony
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
43. Symbol.match, replace, split i search
Podstawowe symbole
const str = "<strong>Success</strong>"
class Tag {
constructor (name) {
this.name = name
}
[Symbol.search] (str) {
return str.indexOf(
"<" + this.name + ">"
)
}
}
str.search(new Tag("strong")) // => 0
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
De鍖niuj dziaanie obiektu w kilku metodach
string.split(object)
string.search(object)
string.replace(object, replacement)
string.match(object)
44. Symbol.toStringTag
Podstawowe symbole
// Standard behavior
const object = {}
"" + object // => "[object Object]"
// Modified behavior
const object = {
[Symbol.toStringTag]: "X"
}
"" + object // => "[object X]"
De鍖niuje podstawowy tag nazwy obiektu
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
45. Symbol.unscopables
Podstawowe symbole
// Declare object
const object = {
txt1: "value",
txt2: "value2",
[Symbol.unscopables]: { "txt2": true }
}
with (object) {
console.log(txt1) // => "value"
console.log(txt2) // ReferenceError
}
Blokuje pola dla konstrukcji with {}
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
47. Jak dziaa proxy?
Proxy
function SomeObject () {
this.pre = "Something "
}
const object = new SomeObject()
const proxy = new Proxy(object, {
get (target, property) {
return target.pre + property
}
})
proxy.special // "Something special"
proxy.funny // "Something funny"
Object.getPrototypeOf(proxy).constructor
// SomeObject
Ustawia puapki (traps) na akcje
Pozwala dynamicznie na zmiany zachowania
Ma dostp do prototypu i konstruktora
Ma dostp do p坦l
Niezmienione akcje zachowuj si tak samo
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
48. Gdzie mo甜emy postawi puapki?
Proxy
Zmiana i pobranie parametru
Konstrukcja obiektu, wykonanie funkcji
Zmiana i pobranie prototypu
Operatory in, delete
Pobranie kluczy obiektu
Wicej: http://bit.ly/mdnproxy
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function Something () {
this.pre = "Something "
}
const object = new X()
const proxy = new Proxy(object, {
get (target, property) {
return target.pre + property
},
set (target, property, value) {
throw new Error("You can't change!")
}
})
Object.getPrototypeOf(proxy) // Something
proxy.special // "Something special"
proxy.special = "xyz" // Error
49. Przykad: Dependency Injection
Proxy
Po prawej szkic DI
brak obsugi bd坦w
brak poprawnego cache
niezoptymalizowane
nie dziaa poprawnie in czy getKeys
Dynamiczne przypisanie danych
Mo甜liwo "lazy loadingu"
Przykad: github.com/rangoo94/easen-di
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function Di (dependencies = {}) {
const cache = {}
this.proxy = new Proxy(dependencies, {
set (deps, prop, value) {
if (typeof value !== "function") {
throw new TypeError()
}
deps[prop] = value
},
get (deps, prop) {
if (!deps[prop]) {
throw new ReferenceError()
}
if (!cache[prop]) {
cache[prop] = deps[prop]()
}
return cache[prop]
}
})
}
const di = new Di({ x: () => "Hello" })
di.proxy.x // "Hello"
50. Przykad: Automatyczna walidacja na osobnej warstwie
Proxy
Walidacja niezale甜na od obiektu kocowego
Mo甜emy mie jeden obiekt, ale N walidacji
Walidacja zale甜na od miejsca zmiany
Przykad - jeden model User zamiast:
CreatedUser
PostUser
AdminUser
RegularUser
StaffUser
SomeWeirdUser
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function Point (x, y) {
this.x = x
this.y = y
}
function assertNumber (x) {
if (typeof x !== "number") {
throw new Error("Incorrect number")
}
}
const checks = {
x: assertNumber,
y: assertNumber
}
function createPoint (...args) {
return new Proxy(new Point(...args), {
set (target, key, value) {
const v = checks[key] || (x => x)
v(value, target)
target[key] = value
}
})
}
51. Przykad: Prywatne wartoci
Proxy
Brak dostpu do wartoci
Bez u甜ycia domkni
http://bit.ly/privatejs
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function User (name, password) {
this.name = name
this.password = password
}
User.prototype.login = function () {
console.log(this.name, this.password)
}
function createUser (...args) {
const priv = [ "password" ]
return new Proxy(new User(...args), {
get (target, key) {
return priv.includes(key) ?
undefined : target[key]
},
ownKeys (target) {
return Reflect.ownKeys(target)
.filter(key => !priv.includes(key))
}
})
}
const user = createUser("name", "pass")
Object.keys(user) // [ "name" ]
user.login() // "name" undefined
52. Przykad: Prywatne wartoci
Proxy
Brak dostpu do wartoci
Bez u甜ycia domkni
this kieruje na proxy, jako metoda proxy
http://bit.ly/privatejs
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
User.prototype.login = function () {
console.log(this.name, this.password)
}
get (target, key) {
return priv.includes(key) ?
undefined : target[key]
}
function User (name, password) {
this.name = name
this.password = password
}
User.prototype.login = function () {
console.log(this.name, this.password)
}
function createUser (...args) {
const priv = [ "password" ]
return new Proxy(new User(...args), {
get (target, key) {
return priv.includes(key) ?
undefined : target[key]
},
ownKeys (target) {
return Reflect.ownKeys(target)
.filter(key => !priv.includes(key))
}
})
}
const user = createUser("name", "pass")
Object.keys(user) // [ "name" ]
user.login() // "name" undefined
53. Przykad: Prywatne wartoci
Proxy
Brak dostpu do wartoci
Bez u甜ycia domkni
this kieruje na proxy, jako metoda proxy
http://bit.ly/privatejs
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function User (name, password) {
this.name = name
this.password = password
}
/* User.prototype.login as before */
function createUser (...args) {
const priv = [ "password" ]
return new Proxy(new User(...args), {
get (t, key) {
if (typeof t[key] === "function") {
return (...args) => {
return t[key](...args)
}
}
return priv.includes(key) ?
undefined : t[key]
},
ownKeys (target) {
return Reflect.ownKeys(target)
.filter(key => !priv.includes(key))
}
})
}
54. Przykad: QueryBuilder/DSL
Proxy
Dynamiczne acuchy funkcjonalnoci
Dawid Rusnak
www.drcode.pl / GitHub: @rangoo94
function QueryBuilder () {
return new Proxy([], {
get (parts, prop, proxy) {
if (prop === "value") {
return parts.join(" ")
}
prop = prop.toUpperCase()
return arg => {
parts.push(`${prop} ${arg}`)
return proxy
}
}
})
}
new QueryBuilder()
.select("*")
.from("articles")
.where("user_id = 10")
.and("visible = true")
.value
// "SELECT * FROM articles
WHERE user_id = 10 AND visible = true"