O U R S P O N S O R S
June 11th, 2024
Arrow - upgrade your funcy Kotlin!
Image Processing Done Wrong
VIE
Sponsors
2
VIE
Personalvermittlungsfirma mit Fokus auf�IT, Finance und Sales
all people shall advance
VIE
Ticket Raffle
4
15% Discount Code
WWC_KotlinVienna15
VIE
Housekeeping
5
VIE
KOIN Call for FEEDBACK
VIE
News
7
VIE
Community Interview
VIE
1 Volunteer
7 easy Questions
Your favourite topic
In German or English
9
VIE
Community Interview
Who are you in one sentence?
How long have you been working with Kotlin?
What are you working on (in Kotlin)?
How is Kotlin used in this project?
Tell us about a Kotlin win.
Tell us about a Kotlin fail.
Any problems/wins using Java Libraries?
Kotlin Frameworks / Features:
10
VIE
Upcoming Schedule 2024
June: Java Vienna "Have you ever considered 24th June� just not writing bugs?" & TBA
June: React Vienna “Demystifying React 24th June� Performance” and “Drawing onto the � Camera with React Native”
August: Kotlin Vienna Stammtisch 20th August
September: Java Vienna Meetup 30th September
October: Kotlin Vienna Beginners Night 1st October
11
VIE
Ask questions at slido.com
#803 11 99
VIE
Speaker Slides Talk #1
VIE
Markus (Fischer)
THIS IS ME
Senacor Technologies AG
ARROW
INTRO
“Hey ChatGPT, generate a good presentation on arrow!”
Senacor Technologies AG
ARROW
INTRO
https://arrow-kt.io/
Senacor Technologies AG
ARROW
INTRO
https://arrow-kt.io/
Senacor Technologies AG
AGENDA FOR TONIGHT
THE PROJECT
https://images.hdqwalls.com/download/red-lamborghini-aventador-new-pn-3840x2400.jpg
✅
🤔
Senacor Technologies AG
AGENDA FOR TONIGHT
THE PROJECT
https://images.hdqwalls.com/download/red-lamborghini-aventador-new-pn-3840x2400.jpg
✅
🤔
Senacor Technologies AG
AGENDA FOR TONIGHT
THE PROJECT
https://images.hdqwalls.com/download/red-lamborghini-aventador-new-pn-3840x2400.jpg
✅
🤔
Senacor Technologies AG
THE PLAN
THE PROJECT
Senacor Technologies AG
THE MERCH
THE PROJECT
COOL.
Senacor Technologies AG
Of course it’s on Github!
THE BACK END
Senacor Technologies AG
SENACOR AT A GLANCE
FACTS & FIGURES
INTERDISCIPLINARY TEAMS
EXCEPTIONALLY SUCCESSFUL
FOCUSED ON DACH REGION
Senacor Technologies AG
€ 252m
Revenue (FY 2023)
15-20% p.a.
Growth as a �long-term trend
> 20 YEARS
Experience with �IT transformations
TOP 20
IT consultancies �in Germany1
1.000+
Developers, strategists, platform designers and expert consultants
CONSULTING
DEVELOPMENT
1. Lünendonk List 2023
Kundenportfolio (Auszug)
55%
45%
Hamburg
Berlin
Bonn
Leipzig
Lublin
Košice
Wien
Munich
Zurich
Stuttgart
Nuremberg
Eschborn
WE NEED SUPPORT!!
You really [ liked | hated ] this talk and want to let me know…
THE END
Email me
Find me on LinkedIn
Talk to me in the break
especially if you want to apply to Senacor… I’ll buy you dinner if you land the job!
Senacor Technologies AG
Speaker Slides Talk #2
VIE
kip
why a horribly unoptimized image processing library
is the best thing I ever made
What?
let‘s take a step back
Topic: Image Processing
Meta-Topic: Hobby Programming
You‘re gonna see this very often today
This is my test raccoon
(source: https://naturschutzbund.at/neobiota-in-oesterreich/articles/der-waschbaer.html)
The Basics
The Smallest Building Block
#624EEE
98 red
(~38%)
78 green
(~31%)
238 blue
(~93%)
The Curve Transformation
The Curve Transformation
The Curve Transformation
The Sigmoid Family
https://en.wikipedia.org/wiki/Sigmoid_function
The Possibilities
The Blur Filter
The Computational Cost
The Bloom Effect
The Most Important Question
Why?
The point is: I had fun!
In doing something enjoyable, I learnt new things and improved my coding skills
The Project
val pipeline = buildPipeline {� branch {� left {� step(retainOnly(maxOver(180)))� step(smooth(50, star(), flip(linear(2.5))))� }� combine { a, b -> a.add(b, OverflowHandling.CLAMP) }� }�}��executePipeline(pipeline) {� load { KipImage(ImageIO.read(File(“path/to/myimage.png")), keepSteps = true) }� save { it.saveAllSteps(Path(“path/to/myoutput"), "step", "PNG") }� log { println(it) }�}
The Approach
class PixelColor(
val r: UInt,
val g: UInt,
val b: UInt,
val a: Uint
)
(PixelColor) -> PixelColor
The Approach
class PixelColor(
val r: UInt,
val g: UInt,
val b: UInt,
val a: Uint
)
(x: Int, y: Int, PixelColor) -> PixelColor
The Approach
class PixelColor(
val r: UInt,
val g: UInt,
val b: UInt,
val a: Uint
)
PixelAccess.(x: Int, y: Int, PixelColor) -> PixelColor
The Functions
linear(2.5)
Returns a function that weighs the center with 250% and falls off to 0% along the radius
(r: Int, max: Int) -> Double
flip(linear(2.5))
The Functions
Flip the dynamic weight around (increase to 250% along the radius)
(r: Int, max: Int) -> Double
50, star(), flip(linear(2.5))
The Functions
Parameters: radius (number), shape (function), weight (function)
(r: Int, max: Int) -> Double
Int
(r: Int, x: Int, y: Int) -> Boolean
smooth(50, star(), flip(linear(2.5)))
The Functions
“smooth” takes one regular and two function parameters and returns a new function
PixelAccess.(x: Int, y: Int, PixelColor) -> PixelColor
step(smooth(50, star(), flip(linear(2.5))))
The Functions
“step” is the entrypoint into the pipeline DSL
The DSL
step(retainOnly(maxOver(180)))
branch {�}
left {�}�right {�}
combine { a, b -> ... }
1. Step
2. Branch
3. Left Branch / Right Branch
4. Combine Branches
So…
Is this really the “best thing I ever made”?
What does “best” mean?
It was one of the most fun projects I ever did, so… I guess, yes!
When was the last time you really had fun with a project?
(this is your sign to start a new hobby project)
Thank you for listening!
Questions?
Ideas?
Wanna try something out with kip?
Contact us
If you have any questions or want to get in touch with us, you are more than welcome to do so!
Our contact information:
55
VIE