Developers’ mDay 2021: Mladen Janjetović, Laravel Srbija – Laravel AwesomemCloud
The document discusses improvements to Laravel framework version 8 including Laravel Jetstream, models directory, model factory classes, migration squashing, anonymous migrations, job batching, improved rate limiting, and improved maintenance mode. It also lists some of the Laravel ecosystem packages.
Developers’ mDay 2021: Bogdan Kecman, Oracle – MySQL nekad i sadmCloud
The document summarizes the evolution of MySQL from its first release in 1995 to version 8.0 released in 2018. It highlights key features and functionality added over time, including improved performance, Unicode support, spatial data types, window functions, common table expressions, and high availability solutions. The document also briefly mentions Oracle's HeatWave and ColumnStore technologies for handling OLAP/OLTP workloads on MySQL.
Developers’ mDay 2021: Mladen Janjetović, Laravel Srbija – Laravel AwesomemCloud
The document discusses improvements to Laravel framework version 8 including Laravel Jetstream, models directory, model factory classes, migration squashing, anonymous migrations, job batching, improved rate limiting, and improved maintenance mode. It also lists some of the Laravel ecosystem packages.
Developers’ mDay 2021: Bogdan Kecman, Oracle – MySQL nekad i sadmCloud
The document summarizes the evolution of MySQL from its first release in 1995 to version 8.0 released in 2018. It highlights key features and functionality added over time, including improved performance, Unicode support, spatial data types, window functions, common table expressions, and high availability solutions. The document also briefly mentions Oracle's HeatWave and ColumnStore technologies for handling OLAP/OLTP workloads on MySQL.
Developers’ mDay 2019. - Zvonimir Gembec, Sysbee – Developers vs Sysadmins – kako se bolje razumeti
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dijana Milutinović, RNIDS – Kako se kalio domenmCloud
Developers’ mDay 2019. - Dijana Milutinović, RNIDS – Kako se kalio domen
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. -Bogdan Kecman, Oracle – MySQL 8.0 – why upgrade
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Rastko Vasiljević, SuperAdmins – Infrastructure as code na primeru Ansible-a
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dejan Bosanac, Red Hat – Cloud scale IoT connectivitymCloud
Developers’ mDay 2019. - Dejan Bosanac, Red Hat – Cloud scale IoT connectivity
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Adrian Smijulj, Webiny – Server-side rendering u Ser...mCloud
Developers’ mDay 2019. - Adrian Smijulj, Webiny – Server-side rendering u Serverless okruženju
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Nikola Krgović, Twin Star Systems – Big Data for Dev...mCloud
Developers’ mDay 2019. - Nikola Krgović, Twin Star Systems – Big Data for Developers
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se
upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dragutin Ćirković, mCloud – HTTP/3
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se
upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay u Banjoj Luci - Janko Isidorović, Mainflux – Unified IoT Pl...mCloud
This document provides information on unified IoT platforms and discusses Mainflux, an open source IoT platform. It begins with an overview of IoT devices, edge computing, on-premise deployment and cloud deployment challenges. It emphasizes the importance of a unified architecture to reduce costs and complexity. The document then describes Mainflux, highlighting its use of microservices and ability to deploy on various hardware from constrained devices to the cloud. It discusses how Mainflux addresses issues like scalability, security and support for multiple protocols and databases.
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...mCloud
Kotlin is here to stay
- Kotlin was unveiled in 2011 by JetBrains and has grown significantly since then
- It is now fully supported by Google for Android development and is widely adopted in the Android community
- Kotlin code runs on the JVM and is 100% interoperable with Java, allowing use of existing Java libraries
- Key advantages of Kotlin include its conciseness, null safety, and support for functional programming patterns
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...mCloud
This document discusses the importance of testing software. It outlines 30 tips for writing tests, including writing tests before code, treating tests like code, minimizing asserts per test, using data providers, and allocating time for testing in estimates. Testing helps catch bugs, improve code quality, and ensure stability. The document emphasizes that automated testing is key and should test everything that could break an app.
Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0mCloud
This document provides information about new features and improvements in MySQL 8.0. It discusses enhancements to JSON functionality including new functions and indexing support. It also summarizes added functionality for GIS, Unicode character sets, UUIDs, window functions, common table expressions, and other query optimizations. The document outlines goals of improving performance, manageability, security and standards compliance for MySQL.
This document provides information about new features and improvements in MySQL 8.0. It discusses enhancements to JSON functionality including new functions and indexing support. It also summarizes added functionality for GIS, UUIDs, common table expressions, window functions, and other query optimizations. The document notes that MySQL 8.0 uses utf8mb4 as the default character set for improved Unicode support and performance.
Trunk Based Development is a development approach where all code changes are directly committed to a main branch called the "trunk". The key aspects are daily integration where all changes are committed to the trunk, keeping the software always ready for production, and prioritizing keeping the system in a production-ready state over writing new code. Features are developed directly in the trunk using small pull requests and code reviews. When features are complete they are immediately deployed through a deployment pipeline to releases. Studies have found that this approach leads to higher throughput, better stability, lower burnout, and overall better performance compared to using dedicated branches.
This document discusses the migration of the Serbian news portal telegraf.rs from WordPress to a custom content management system. Telegraf.rs started on WordPress but grew very large, with over 900,000 posts and 2 million metadata entries, placing pressure on the system. The new telegraf CMS is built in-house to be infinitely scalable, using a microservices architecture and NoSQL databases. It aims to support the site's existing functionality like shortcodes while improving performance, response times, and the ability to handle the site's large volume of images and data. The new system is still in beta but shows great early performance improvements over the WordPress installation and competitor sites.
Developers’ mDay 2019. - Zvonimir Gembec, Sysbee – Developers vs Sysadmins – kako se bolje razumeti
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dijana Milutinović, RNIDS – Kako se kalio domenmCloud
Developers’ mDay 2019. - Dijana Milutinović, RNIDS – Kako se kalio domen
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. -Bogdan Kecman, Oracle – MySQL 8.0 – why upgrade
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Rastko Vasiljević, SuperAdmins – Infrastructure as code na primeru Ansible-a
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dejan Bosanac, Red Hat – Cloud scale IoT connectivitymCloud
Developers’ mDay 2019. - Dejan Bosanac, Red Hat – Cloud scale IoT connectivity
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Adrian Smijulj, Webiny – Server-side rendering u Ser...mCloud
Developers’ mDay 2019. - Adrian Smijulj, Webiny – Server-side rendering u Serverless okruženju
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Nikola Krgović, Twin Star Systems – Big Data for Dev...mCloud
Developers’ mDay 2019. - Nikola Krgović, Twin Star Systems – Big Data for Developers
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se
upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay 2019. - Dragutin Ćirković, mCloud – HTTP/3
Developers’ mDay konferencija okuplja inspirativne ljude iz oblasti web developmenta. U pitanju je događaj stručnog karaktera, namenjen web developerima sa ciljem da se
upoznaju sa aktuelnim tehnologijama u projektovanju web sistema, iskustvima u korišćenju najnovijih tehnika i tehnologija, kao i u rešavanju problema sa kojima se svakodnevno suočavaju.
Developers’ mDay u Banjoj Luci - Janko Isidorović, Mainflux – Unified IoT Pl...mCloud
This document provides information on unified IoT platforms and discusses Mainflux, an open source IoT platform. It begins with an overview of IoT devices, edge computing, on-premise deployment and cloud deployment challenges. It emphasizes the importance of a unified architecture to reduce costs and complexity. The document then describes Mainflux, highlighting its use of microservices and ability to deploy on various hardware from constrained devices to the cloud. It discusses how Mainflux addresses issues like scalability, security and support for multiple protocols and databases.
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...mCloud
Kotlin is here to stay
- Kotlin was unveiled in 2011 by JetBrains and has grown significantly since then
- It is now fully supported by Google for Android development and is widely adopted in the Android community
- Kotlin code runs on the JVM and is 100% interoperable with Java, allowing use of existing Java libraries
- Key advantages of Kotlin include its conciseness, null safety, and support for functional programming patterns
Developers’ mDay u Banjoj Luci - Milan Popović, PHP Srbija – Testimony (about...mCloud
This document discusses the importance of testing software. It outlines 30 tips for writing tests, including writing tests before code, treating tests like code, minimizing asserts per test, using data providers, and allocating time for testing in estimates. Testing helps catch bugs, improve code quality, and ensure stability. The document emphasizes that automated testing is key and should test everything that could break an app.
Developers’ mDay u Banjoj Luci - Bogdan Kecman, Oracle – MySQL Server 8.0mCloud
This document provides information about new features and improvements in MySQL 8.0. It discusses enhancements to JSON functionality including new functions and indexing support. It also summarizes added functionality for GIS, Unicode character sets, UUIDs, window functions, common table expressions, and other query optimizations. The document outlines goals of improving performance, manageability, security and standards compliance for MySQL.
This document provides information about new features and improvements in MySQL 8.0. It discusses enhancements to JSON functionality including new functions and indexing support. It also summarizes added functionality for GIS, UUIDs, common table expressions, window functions, and other query optimizations. The document notes that MySQL 8.0 uses utf8mb4 as the default character set for improved Unicode support and performance.
Trunk Based Development is a development approach where all code changes are directly committed to a main branch called the "trunk". The key aspects are daily integration where all changes are committed to the trunk, keeping the software always ready for production, and prioritizing keeping the system in a production-ready state over writing new code. Features are developed directly in the trunk using small pull requests and code reviews. When features are complete they are immediately deployed through a deployment pipeline to releases. Studies have found that this approach leads to higher throughput, better stability, lower burnout, and overall better performance compared to using dedicated branches.
This document discusses the migration of the Serbian news portal telegraf.rs from WordPress to a custom content management system. Telegraf.rs started on WordPress but grew very large, with over 900,000 posts and 2 million metadata entries, placing pressure on the system. The new telegraf CMS is built in-house to be infinitely scalable, using a microservices architecture and NoSQL databases. It aims to support the site's existing functionality like shortcodes while improving performance, response times, and the ability to handle the site's large volume of images and data. The new system is still in beta but shows great early performance improvements over the WordPress installation and competitor sites.
7. Uvod, Konkurento i(li) asinhrono izvršavanje
Fundamentalno postoje dva načina procesuiranja više zahtjeva istovremeno a to su
multithreaded sinhroni i asinhroni model (single i multithreaded način)
Jednostavno rečeno “concurrency” znači procesuirati više zahtjeva u isto vrijeme.
9. Concurrency model in JS
JavaScript ima dosta drugačiji concurrency model od jezika kao što su Java ili Ruby, JavaScript
concurrency model baziran je na "event loop"
Da je JavaScript hipster, imao bi bradu!
12. Callback
Callback je samo konvencija za JS funkcije. Ne postoji stvar u jeziku zvana 'callback'.
Sam pojam 'asinhrono možemo smatrati kao 'desit će se u budućnosti, ali ne trenutno’. Najčešće callback
funkcije koristimo kod I/O operacija npr. preuzimanje nekog sadržaja, čitanje iz fajlova, komuniciranje sa bazom
podataka, itd.
const sumResult = sum(2, 3)
// sumResult = 5
const cbResult = resource.consume('res://aaa/ss', (err, response) => {/* ... */})
// cbResult = undefined
13. Sinhroni callback?
Funkcija koju proslijedimo nekoj drugoj funkciji ne mora nužno biti asinhrona.
Razlika da li je funkcija asinhrona ili sinhrona može biti konfuzna, da li je funkcija
sinhrona ili asinhrona zavisi od konteksta.
const numbersArray = [1, 2, 3, 4, 5]
const transformedArray = numbersArray.map(number => number * 2)
console.log(transformedArray)
14. Callback
hell?
const request = require('request')
const Config = require('../shared/Config')
const getBorrowedBook = cb => {
request.get(Config.USERS_URL, (err, response) => {
if (err) {
cb(err)
}
const { results } = JSON.parse(response.body)
const { 0: { email } } = results
request.get(Config.BASE_URL + encodeURIComponent(email), (err2, response2) => {
if(err2) {
cb(err2)
}
cb(null, response2.body)
})
})
}
getBorrowedBook((err, succes) => {
if(err) {
console.err(err)
} else {
console.log(succes)
}
})
Callback Hell anti-pattern
koji se često pojavljuje u
kodu koji callback funkcije
koriste za orkestriranje
asinhronih operacija.
16. Korak u pravom smjeru bi bila apstrakcija asinhronih operacija, a takva apstrakcija
su promisi.
Promises
const futureValue = ms =>
new Promise((resolve) => {
setTimeout(() => resolve('value'), ms)
})
17. Kreiranje promisa
Executor je funkcija koja se proslijedi promis konstruktoru sa argumentima resolve i
reject
const executor = (resolve, reject) => {
// ... in case of success resolve()
// ... else reject()
}
const promise = new Promise(executor)
20. Promise.prototype.then
.then funkcija prima dvije funkcije kao argumente a to su success i failure handler
funkcije
const onFulfilled = result => console.log(result)
const onRejected = reason => console.log(reason)
getUsers()
.then(onFulfilled, onRejected)
21. Promise.prototype.then
Najčešće viđamo .then handler, gdje se koristi samo “fulfilled” funkcija
const onFulfilled = result => console.log(result)
const onRejected = reason => console.log(reason)
getUsers()
.then(users => users.filter(user => !user.name.includes('owe')))
.then(users => users.map(user => ({
name: user.name
})))
.then(onFulfilled, onRejected)
27. Generatori
Generatori su funkcije koje
dozvoljavaju pauzu, vraćaju
vrijednost i kasnije ponovno
nastavljaju rad i pritom, kontekst tj.
varijabilna vezivanja biće sačuvana
prilikom re-ulaza
function* generatorFunction(){
const number = 7
yield number + 2
yield 5
yield number + 1
}
const generatorObject = generatorFunction()
console.log(generatorObject.next())
for(val of generatorObject){
console.log(val)
}
28. Generatori
Pozivanjem generator
funkcije, tijelo te funkcije se
neće izvršiti odmah, nego će
vratiti “iterator” objekat, tek
kada se na iterator objektu
pozove next() metoda. Tada
će se izvršiti tijelo generator
funkcije, sve do prvog yield
izraza, što određuje vrijednost
koja će biti vraćena iz
iteratora.
function* generatorFunction() {
let firstNumber = 1, secondNumber = 0
for(let i = 0; i < 50; i++) {
[firstNumber, secondNumber] = [secondNumber, firstNumber]
secondNumber = firstNumber + secondNumber
yield firstNumber
}
}
for(value of generatorFunction()) {
console.log(value)
}
29. next() metoda može i da primi
vrijednost koja će biti korištena da
promijeni stanje generator funkcije.
Vrijednost koja je proslijeđena next()
funkciji će biti tretirana kao rezultat
posljednjeg pozivanja yield izraza.
Generatori
function* selfEsteeamBooster() {
let name = yield
const sufixes = [
'will rock it today.',
'are so very handsome this morning.',
'is pure gold!'
]
while(true){
yield name + " " + sufixes[
Math.floor(Math.random() * sufixes.length)]
}
}
const message = selfEsteeamBooster()
message.next()
setInterval(() => {
console.log(message.next('Some name').value)
}, 1000)
32. Async Await
Poziv asinhrone funkcije vraća Promis objekat. Promis
će biti “riješen” (resolved) sa vrijednosti koju promis
vrati.
Asinhrone funkcije mogu da sadrže await izraze. await
izrazi pauziraju izvršavanje asinhrone funkcije i čekaju
sve dok se proslijeđeni promis ne izvrši (ispuni/odbije),
tek tada asinhrona funkcija nastavlja sa radom.
33. Await tok
// Koristeći async/await tok izvršavanja
const bookId = await getBookId('javaScript the good parts')
const book = await getFromStore(Resources.BOOKS, bookId)
console.log(book)
// Koristeći promis tok
getBookId('javaScript the good parts')
.then(number => {
getBookFromStore(Resources.BOOKS, number)
.then(book => {
console.log(book)
})
})
36. Unutar async konteksta operacije se
izvršavaju u sekvenci i čekaju
izvršavanje, ali sve izvan tog
asinhronog zadatka ne blokira ostali
kod. Ako želimo da “čekamo” na
izvršavanje nekog asinhronog
“zadatka”, možemo ga pozvati unutar
tog konteksta.
Async “zadaci”
const BASE_URL = 'https://jsonplaceholder.typicode.com/'
const logicalTaskOne = (async () => {
const data = await fetch(BASE_URL+'users');
const result = await data.json()
return result;
})()
const logicalTaskTwo = (async () => {
const data = await fetch(BASE_URL+'photos')
const result = await data.json()
return result;
})()
logicalTaskTwo
.then(console.log)
logicalTaskOne
.then(console.log)