SBT is a build tool for Scala projects. It uses keys and scopes to configure projects and tasks. Files are located in the project directory and can configure settings, dependencies, and plugins. Operators like := and += are used to set and combine values. Plugins extend the functionality of SBT and can be defined by creating objects that provide settings. The document provides an overview of how SBT works and examples of configuring projects, tasks, and creating plugins.
Speech of Nihad Abbasov, Senior Software Engineer at Digital Classifieds, at Ruby Meditation 27, Dnipro, 19.05.2019
Slideshare -
Next conference - http://www.rubymeditation.com/
How fast is your code? Performance is crucial as your startup grows, and optimizing your application can make a huge impact on user experience. During this talk, you will learn hints, techniques and best practices for improving the overall speed of your Ruby application.
Announcements and conference materials https://www.fb.me/RubyMeditation
News https://twitter.com/RubyMeditation
Photos https://www.instagram.com/RubyMeditation
The stream of Ruby conferences (not just ours) https://t.me/RubyMeditation
From Java to Kotlin - The first month in practiceStefanTomm
This presentation shows the advantages and how easy it is for a Java developer to switch to Kotlin. There is also a sample project on github, that compares the two languages at the example of a Spring Boot application: https://github.com/Meshcloud/spring-kotlin-example
There is also a second version of these slides available on slideshare, as slideshare does not allow updating existing slides: https://www.slideshare.net/StefanTomm/from-java-to-kotlin-the-first-month-in-practice-v2
No More Deadlocks; Asynchronous Programming in .NETFilip Ekberg
In this talk I go over what asynchronous programming is, and how to use it. We will discover how to avoid potential deadlocks and what the best practices are in asynchronous programming in .NET.
Speech of Nihad Abbasov, Senior Software Engineer at Digital Classifieds, at Ruby Meditation 27, Dnipro, 19.05.2019
Slideshare -
Next conference - http://www.rubymeditation.com/
How fast is your code? Performance is crucial as your startup grows, and optimizing your application can make a huge impact on user experience. During this talk, you will learn hints, techniques and best practices for improving the overall speed of your Ruby application.
Announcements and conference materials https://www.fb.me/RubyMeditation
News https://twitter.com/RubyMeditation
Photos https://www.instagram.com/RubyMeditation
The stream of Ruby conferences (not just ours) https://t.me/RubyMeditation
From Java to Kotlin - The first month in practiceStefanTomm
This presentation shows the advantages and how easy it is for a Java developer to switch to Kotlin. There is also a sample project on github, that compares the two languages at the example of a Spring Boot application: https://github.com/Meshcloud/spring-kotlin-example
There is also a second version of these slides available on slideshare, as slideshare does not allow updating existing slides: https://www.slideshare.net/StefanTomm/from-java-to-kotlin-the-first-month-in-practice-v2
No More Deadlocks; Asynchronous Programming in .NETFilip Ekberg
In this talk I go over what asynchronous programming is, and how to use it. We will discover how to avoid potential deadlocks and what the best practices are in asynchronous programming in .NET.
Understanding reactive programming with microsoft reactive extensionsOleksandr Zhevzhyk
We all want our applications to be responsible, reliable and testable. But event-driven paradigm sometimes could lead us to obscured or, even worse, messy code. Let’s look into the world, where generated data, background tasks and events are stuck together as asynchronous data streams to achieve a better result.
(DEV307) Introduction to Version 3 of the AWS SDK for Python (Boto) | AWS re:...Amazon Web Services
In this session, we introduce Boto 3, the next major version of the AWS SDK for Python. You will learn about the new features in the SDK, such as the high-level resource APIs that simplify working with AWS collections and objects, and the eventing model that enables customizing your calls to AWS services. We use a sample application to demonstrate these features, and show how to integrate them with your existing projects.
More Data, More Problems: Evolving big data machine learning pipelines with S...Alex Sadovsky
These are the slides from the Denver/Boulder Spark meet-up on February 24th, 2016. (deck build animations are all broken here... sorry!)
This talk provides an evaluation of existing machine learning pipelines in the eyes of different key stakeholders in the data science ecosystem. Focus is be placed upon the entire process from data to product (and keeping everyone in-between happy). Ultimately I explore how to utilize Spotify’s Luigi pipeline tool in combination with Spark to produce batch processing machine learning pipelines that have operational insights and redundancy built in.
Using Reason's type inference we can create GraphQL servers with 100% type coverage. Regardless if we compile to Node.js or native binaries using Reason we can do this with ease.
Besides that Reason shines even more so on the client. Send one quick introspection request and you get full auto completion on your schema right in the browser.
This presentation educate you about how to create table using Python MySQL with example syntax and Creating a table in MySQL using python.
For more topics stay tuned with Learnbay.
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
A short introduction to the concepts of functional reactive programming, and their implementation in ReactiveCocoa, a framework for iOS and OS X developers.
This speech was given at CocoaHeads Paris, October 9th 2014
My attempts to make my experience developing Play 2 web-applications (in Scala) more Rails-like.
I show 3 frameworks employed that draw nearer to the Ruby/Rails spirit than Play's default offerings.
Fullstack Conference - Proxies before proxies: The hidden gems of Javascript...Tim Chaplin
Tired of console.logging your way through applications? Want a way to slice through your application without adding complexity? AOP has been the answer to these questions for object oriented languages, such as Java and C#, but is not available in Javascript. ScarletJS(https://github.com/scarletjs/scarlet) is a project that tackles AOP using a clean, fluent, performant interface.
The ScarletJS project provides Javascript developers a different way of thinking about traditional javascript problems. The project is still growing and looking into the future of what ES6 proxies will open up to the Javascript community.
The talk will highlight the problems that javascript developers face with logging application behavior, security, and more. It will discuss the benefits of identifying a cross cutting concern, and programming using aspects. The talk will highlight how thinking about a project and cross cutting concerns can lead to cleaner more SOLID code. It will also discuss the future of ES6 proxies and the benefits that they will bring.
Understanding reactive programming with microsoft reactive extensionsOleksandr Zhevzhyk
We all want our applications to be responsible, reliable and testable. But event-driven paradigm sometimes could lead us to obscured or, even worse, messy code. Let’s look into the world, where generated data, background tasks and events are stuck together as asynchronous data streams to achieve a better result.
(DEV307) Introduction to Version 3 of the AWS SDK for Python (Boto) | AWS re:...Amazon Web Services
In this session, we introduce Boto 3, the next major version of the AWS SDK for Python. You will learn about the new features in the SDK, such as the high-level resource APIs that simplify working with AWS collections and objects, and the eventing model that enables customizing your calls to AWS services. We use a sample application to demonstrate these features, and show how to integrate them with your existing projects.
More Data, More Problems: Evolving big data machine learning pipelines with S...Alex Sadovsky
These are the slides from the Denver/Boulder Spark meet-up on February 24th, 2016. (deck build animations are all broken here... sorry!)
This talk provides an evaluation of existing machine learning pipelines in the eyes of different key stakeholders in the data science ecosystem. Focus is be placed upon the entire process from data to product (and keeping everyone in-between happy). Ultimately I explore how to utilize Spotify’s Luigi pipeline tool in combination with Spark to produce batch processing machine learning pipelines that have operational insights and redundancy built in.
Using Reason's type inference we can create GraphQL servers with 100% type coverage. Regardless if we compile to Node.js or native binaries using Reason we can do this with ease.
Besides that Reason shines even more so on the client. Send one quick introspection request and you get full auto completion on your schema right in the browser.
This presentation educate you about how to create table using Python MySQL with example syntax and Creating a table in MySQL using python.
For more topics stay tuned with Learnbay.
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
A short introduction to the concepts of functional reactive programming, and their implementation in ReactiveCocoa, a framework for iOS and OS X developers.
This speech was given at CocoaHeads Paris, October 9th 2014
My attempts to make my experience developing Play 2 web-applications (in Scala) more Rails-like.
I show 3 frameworks employed that draw nearer to the Ruby/Rails spirit than Play's default offerings.
Fullstack Conference - Proxies before proxies: The hidden gems of Javascript...Tim Chaplin
Tired of console.logging your way through applications? Want a way to slice through your application without adding complexity? AOP has been the answer to these questions for object oriented languages, such as Java and C#, but is not available in Javascript. ScarletJS(https://github.com/scarletjs/scarlet) is a project that tackles AOP using a clean, fluent, performant interface.
The ScarletJS project provides Javascript developers a different way of thinking about traditional javascript problems. The project is still growing and looking into the future of what ES6 proxies will open up to the Javascript community.
The talk will highlight the problems that javascript developers face with logging application behavior, security, and more. It will discuss the benefits of identifying a cross cutting concern, and programming using aspects. The talk will highlight how thinking about a project and cross cutting concerns can lead to cleaner more SOLID code. It will also discuss the future of ES6 proxies and the benefits that they will bring.
Gave a talk at StartCon about the future of Growth. I touch on viral marketing / referral marketing, fake news and social media, and marketplaces. Finally, the slides go through future technology platforms and how things might evolve there.
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
How can a digital marketing consultant help your business? In this resource we'll count the ways. 24 additional marketing resources are bundled for free.
Python Code Camp (Professionals) is a whole day workshop that aims to enable professionals to learn Python Basics and Django.
Visit: http://devcon.ph/events/python-code-camp-professionals-2016
2. What's inside?
● Where did my XML go?
● How does it work?
● Where do the files go
● What's up with all the operators?
● Creating plugins
● And now?
● Wordnik services
3. Where did my XML go?
Short answer:
away
Long answer:
I hope it stays there
4. How does it work
● Keys
○ Names for properties: setting key
○ Names for tasks: task key, input task key
● Containers for keys:
○ projects
○ build
○ plugin
● Configurations:
○ Kind of like package names in regular code in that
they provide namespacing
○ Can have different classpath and dependency
information
5. How does it work?
Scopes really tie the thing together.
Keys get values attached to them at scope
axes
Saying:
name := "awesomest-project-ever"
is really the same as saying
name in This := "awesomest-..."
the task compile refers to:
compile in (Compile, This)
6. Where do the files go
./*.sbt and project/*.scala
both belong to the same build.
The ./*.sbt files provide settings for the
project defined with base = file(".")
module/something/*.sbt provides settings for
a submodule defined in project/build.scala
with base = file("modules/something")
7. Where do the files go
Global settings for a user:
~/.sbt/sbt.version/*.sbt
Global plugins for a user:
~/.sbt/sbt.version//plugins/*.sbt and ~/.
sbt/sbt.version//plugin/project/*.scala
Plugins local to a project:
project/*.sbt and project/project/*.scala
8. What's up with all the operators?
:= set a value of a property from a value
+= add a value to a key that is a list
++= add a list of values to a key that is a list
~= update a value with a function T => T
<<= set a value of a property from a sbt
value
<+= add a value of a property from a sbt
value
<++= adds a list of values like <+=
9. Creating a project
Either use ./build.sbt directly
or create a project/build.scala
object MyBuild extends Build {
lazy val root = Project(
id = "friendly-name-for-project",
base = file(".") // place to look for files
)
}
10. Adding dependencies
Requiring full name with version modifier:
"org.json4s" % "json4s-jackson_2.10" %
"3.1.0"
Name only, no version modifier:
"org.json4s" %% "json4s-jackson" % "3.1.0"
12. Creating a plugin
writing an sbt plugin or a build file are the
same thing. The plugin is reusable and
sharable across many projects. Other than
that they are the same.
If you can write it in a class you can write it in
sbt, it's a matter of seeing the translation and
breaking it apart in context + behavior, like
most other things Scala.
13. Creating a plugin
class Greeter(greeting: String) {
def greet(
name: String,
from: String,
log: String => Unit) =
log(
greeting + " " + name + " from " + from)
}
14. Creating a plugin
Keys:
val objKey = SettingKey[Greeter]("greeter")
val taskKey = TaskKey[Unit]("greet")
Settings:
objKey := new Greeter("Hello")
name in taskKey := "Ivan"
taskKey <<= (name in taskKey, name, objKey,
streams) {
(theName, from, obj, s) =>
obj.greet(theName, from, s.log.info(_) }
15. Creating a plugin
Wrap those up in an object that extends
Plugin and put those settings in a Seq
[Setting[_]] and you're good to go, you've got
a plugin.
16. Creating a plugin
HOMEWORK:
Try to create a plugin that will display the
latest tweet for a user given a user name
from an sbt setting.
or instead of a tweet, try downloading the list
of open issues from jira when credentials are
provided.
17. And now?
Go forth and build awesome stuff?
You'll probably want to look at the sbt.Keys
file, to see what all the keys are that are
currently defined.
Read the source of many other plugins, so
that they no longer appear to do magic.