Sean Parsons and Mark Baker from MindCandy discuss their use of Scala in services and tools. They chose Scala due to familiarity with the JVM, static types, and its large community. They used Scala to build backend services including for users, games, news and more. They also used Scala for tools like the REPL, scripts, a setup tool and Play-based websites. They found Scala good for expressing algorithms clearly and taking advantage of immutability and actors to scale. While learning Scala required learning new syntax and paradigms, they plan to continue using it for tools, scripts and services going forward.
While the Java platform has gained notoriety in the last 15 years as a robust application platform with a thriving ecosystem and well-established practices, the Java language has had its share of criticism. Highly verbose, overly didactic, limited feature set; whichever flavor of criticism you prefer, it's patently obvious that Java is playing catch up to more modern languages with a less rigid evolution path.
The language landscape today is vastly different than it had been five or ten years ago; a wide array of languages are available, designed to suit a variety of flavors: Groovy, Clojure, Scala, Gosu, Kotlin... which should you choose? This lecture focuses on one company's decision to focus on Scala, and presents a case study based on our experiences using Scala in practice, in the hope of providing much-needed real world context to assist your decision.
This presentation was used for the Scala In Practice lecture at the Botzia Israeli Java User Group meeting, May 3rd 2012.
With Java 8 adoption skyrocketing, is Scala still relevant? In our opinion, the answer is an unequivocal yes. To make our point, Tomer Gabel (system architect at Wix) will showcase practical examples where Scala's features provide a definitive advantage over Java 8. These include:
* Effective logging with traits and by-name parameters;
* Pattern matching for fun and profit;
* Type-safe, efficient serialization with type classes.
A talk given at a Wix Ukraine R&D meetup in Dnipropetrovsk, Ukraine on 6 April, 2016.
Video recording: https://youtu.be/EXxA3PlcdBg?t=3680
Sample code: https://github.com/holograph/scala-vs-java8
Scalaz is a Scala library for functional programming.
It provides purely functional data structures to complement those from the Scala standard library. It defines a set of foundational type classes (e.g. Functor, Monad) and corresponding instances for a large number of data structures.
While the Java platform has gained notoriety in the last 15 years as a robust application platform with a thriving ecosystem and well-established practices, the Java language has had its share of criticism. Highly verbose, overly didactic, limited feature set; whichever flavor of criticism you prefer, it's patently obvious that Java is playing catch up to more modern languages with a less rigid evolution path.
The language landscape today is vastly different than it had been five or ten years ago; a wide array of languages are available, designed to suit a variety of flavors: Groovy, Clojure, Scala, Gosu, Kotlin... which should you choose? This lecture focuses on one company's decision to focus on Scala, and presents a case study based on our experiences using Scala in practice, in the hope of providing much-needed real world context to assist your decision.
This presentation was used for the Scala In Practice lecture at the Botzia Israeli Java User Group meeting, May 3rd 2012.
With Java 8 adoption skyrocketing, is Scala still relevant? In our opinion, the answer is an unequivocal yes. To make our point, Tomer Gabel (system architect at Wix) will showcase practical examples where Scala's features provide a definitive advantage over Java 8. These include:
* Effective logging with traits and by-name parameters;
* Pattern matching for fun and profit;
* Type-safe, efficient serialization with type classes.
A talk given at a Wix Ukraine R&D meetup in Dnipropetrovsk, Ukraine on 6 April, 2016.
Video recording: https://youtu.be/EXxA3PlcdBg?t=3680
Sample code: https://github.com/holograph/scala-vs-java8
Scalaz is a Scala library for functional programming.
It provides purely functional data structures to complement those from the Scala standard library. It defines a set of foundational type classes (e.g. Functor, Monad) and corresponding instances for a large number of data structures.
Can you believe that the Scala programming language is already 13 years old? Scala was an experiment back in 2003, but there are no questions today about its success and its great influence on other languages, especially on Java. In this session we will travel time, going back to the age when Java was the hacker’s drink, while Pizza was the hacker’s food. We will glance through some of the memorable moments, and land in the present days to introduce all the goodnesses available in the upcoming Scala 2.12 release. Finally, we will take a brief but intense look at what we can expect from the future. Prepare your time traveling equipment, and be ready to rewind the clock to more than 20 years ago!
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabCloudxLab
Big Data with Hadoop & Spark Training: http://bit.ly/2IXKBvs
This CloudxLab Introduction to Scala tutorial helps you to understand Scala in detail. Below are the topics covered in this tutorial:
1) Scala - Scalable Language
2) Why Scala?
3) Scala - History
4) Scala - Hello World - Example
5) Scala - Hello World - Compiling and Running
6) Variables in Scala
7) Immutable variables
8) Type inference in Scala
9) Classes in Scala
10) Singleton Objects in Scala
11) Scala - If - else
12) Loops in Scala - while, do - while and for loops
13) Different ways of representing functions in Scala
14) Scala Collections
15) Sequences - Array & List
16) Scala Collections - Sets, Tuples and Maps
17) Higher Order Functions in Scala - map, flatMap, filter, foreach and reduce
18) Interaction with Java
19) SBT - Build Tool in Scala
20) SBT Demo
21) Case Classes in Scala
During the talk, we will build a simple web app using Lift and then introduce Akka ( http://akkasource.org) to help scale it. Specifically, we will demonstrate Remote Actors, "Let it crash" fail over, and Dispatcher. Other Scala oriented tools we will use include sbt and ENSIME mode for emacs.
The talk was given on local JUG meetup back in 2014. The purpose of the talk was to give an overview of the Akka library for the Java-programmers audience who have never used it before. My first appearance as a public speaker
Building Enterprise Search Engines using Open Source TechnologiesRahul Singh
Enterprise Search is a challenging problem for most organizations. Public search technologies such as Google can index content and use link popularity to rank content in addition to the basic keyword matches. Enterprise Search is different. Sometimes it requires specially designed indexes as well as several processing steps.
At the U.S. Patent & Trademark Office, part of the Department of Commerce, a team of professionals is building the next generation of search tools using open source technologies. Like any large undertaking, it’s not a simple plug and play project.
Main topics to be covered in this talk:
+ Architectures for Large Scale Enterprise Search
+ Leveraging Apache Cassandra & Spark
+ Customizing / Configuring Apache SolR and Indexing
+ Writing a custom Parser for SolR in Scala
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
Долгое время разработка производительных, масштабируемых, надежных и экономически эффективных распределенных систем, была прерогативой узкого круга специалистов. Переезд в «облако», сам по себе, проблему не решил. Обещанная провайдерами дешевая линейная масштабируемость, по-прежнему, недостижимая мечта для всех, сидящих «на игле» реляционных баз данных и монолитных архитектур.
С выходом Microsoft Orleans, разработчики, наконец-то, получили максимально простую и удобную платформу для создания масштабируемых и отказоустойчивых распределенных систем, предназначенных для запуска в «облаке» или в приватном дата-центре.
В докладе будут рассмотрены основные концепции и прецеденты использования платформы, такие как: Internet Of Things (IoT), распределенная обработка потоков данных, масштабирование РСУБД и любых других ограниченных ресурсов, отказоустойчивая координация длительно выполняющихся бизнес-процессов.
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Reactivesummit
Akka Streams and its amazing handling of stream back-pressure should be no surprise to anyone. But it takes a couple of use cases to really see it in action - especially use cases where the amount of work increases as you process make you really value the back-pressure.
This talk takes a sample web crawler use case where each processing pass expands to a larger and larger workload to process, and discusses how we use the buffering capabilities in Kafka and the back-pressure with asynchronous processing in Akka Streams to handle such bursts.
In addition, we will also provide some constructive “rants” about the architectural components, the maturity, or immaturity you’ll expect, and tidbits and open source goodies like memory-mapped stream buffers that can be helpful in other Akka Streams and/or Kafka use cases.
Introduction to Akka 2. Explains what Akka's actors are all about and how to utilize them to write scalable and fault-tolerant systems.
Talk given at JavaZone 2012.
Can you believe that the Scala programming language is already 13 years old? Scala was an experiment back in 2003, but there are no questions today about its success and its great influence on other languages, especially on Java. In this session we will travel time, going back to the age when Java was the hacker’s drink, while Pizza was the hacker’s food. We will glance through some of the memorable moments, and land in the present days to introduce all the goodnesses available in the upcoming Scala 2.12 release. Finally, we will take a brief but intense look at what we can expect from the future. Prepare your time traveling equipment, and be ready to rewind the clock to more than 20 years ago!
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabCloudxLab
Big Data with Hadoop & Spark Training: http://bit.ly/2IXKBvs
This CloudxLab Introduction to Scala tutorial helps you to understand Scala in detail. Below are the topics covered in this tutorial:
1) Scala - Scalable Language
2) Why Scala?
3) Scala - History
4) Scala - Hello World - Example
5) Scala - Hello World - Compiling and Running
6) Variables in Scala
7) Immutable variables
8) Type inference in Scala
9) Classes in Scala
10) Singleton Objects in Scala
11) Scala - If - else
12) Loops in Scala - while, do - while and for loops
13) Different ways of representing functions in Scala
14) Scala Collections
15) Sequences - Array & List
16) Scala Collections - Sets, Tuples and Maps
17) Higher Order Functions in Scala - map, flatMap, filter, foreach and reduce
18) Interaction with Java
19) SBT - Build Tool in Scala
20) SBT Demo
21) Case Classes in Scala
During the talk, we will build a simple web app using Lift and then introduce Akka ( http://akkasource.org) to help scale it. Specifically, we will demonstrate Remote Actors, "Let it crash" fail over, and Dispatcher. Other Scala oriented tools we will use include sbt and ENSIME mode for emacs.
The talk was given on local JUG meetup back in 2014. The purpose of the talk was to give an overview of the Akka library for the Java-programmers audience who have never used it before. My first appearance as a public speaker
Building Enterprise Search Engines using Open Source TechnologiesRahul Singh
Enterprise Search is a challenging problem for most organizations. Public search technologies such as Google can index content and use link popularity to rank content in addition to the basic keyword matches. Enterprise Search is different. Sometimes it requires specially designed indexes as well as several processing steps.
At the U.S. Patent & Trademark Office, part of the Department of Commerce, a team of professionals is building the next generation of search tools using open source technologies. Like any large undertaking, it’s not a simple plug and play project.
Main topics to be covered in this talk:
+ Architectures for Large Scale Enterprise Search
+ Leveraging Apache Cassandra & Spark
+ Customizing / Configuring Apache SolR and Indexing
+ Writing a custom Parser for SolR in Scala
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
Долгое время разработка производительных, масштабируемых, надежных и экономически эффективных распределенных систем, была прерогативой узкого круга специалистов. Переезд в «облако», сам по себе, проблему не решил. Обещанная провайдерами дешевая линейная масштабируемость, по-прежнему, недостижимая мечта для всех, сидящих «на игле» реляционных баз данных и монолитных архитектур.
С выходом Microsoft Orleans, разработчики, наконец-то, получили максимально простую и удобную платформу для создания масштабируемых и отказоустойчивых распределенных систем, предназначенных для запуска в «облаке» или в приватном дата-центре.
В докладе будут рассмотрены основные концепции и прецеденты использования платформы, такие как: Internet Of Things (IoT), распределенная обработка потоков данных, масштабирование РСУБД и любых других ограниченных ресурсов, отказоустойчивая координация длительно выполняющихся бизнес-процессов.
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Reactivesummit
Akka Streams and its amazing handling of stream back-pressure should be no surprise to anyone. But it takes a couple of use cases to really see it in action - especially use cases where the amount of work increases as you process make you really value the back-pressure.
This talk takes a sample web crawler use case where each processing pass expands to a larger and larger workload to process, and discusses how we use the buffering capabilities in Kafka and the back-pressure with asynchronous processing in Akka Streams to handle such bursts.
In addition, we will also provide some constructive “rants” about the architectural components, the maturity, or immaturity you’ll expect, and tidbits and open source goodies like memory-mapped stream buffers that can be helpful in other Akka Streams and/or Kafka use cases.
Introduction to Akka 2. Explains what Akka's actors are all about and how to utilize them to write scalable and fault-tolerant systems.
Talk given at JavaZone 2012.
Team Builders are CHANGE AGENTS
“Synergy is defined as "the combined action of two of more substances or agents to achieve an effect greater than that of which each is individually capable.”
In this presentation I will show you the nine principles of team building that can set you up for unparalleled success in your Trevo Business.
Many links to accompany conference presentation at Reading Forward South, 30 September, 2011, in Springfield, IL. The idea: take advantage of free Internet resources to save subscription money and to supplement using professional review journals for library collection development.
Get your city ready for #GivingTuesday 2014 - lessons from BaltimoreHeather Fields
Get your community or city ready for a #GivingTuesday campaign in 2014. This presentation shares tips and lessons learned from the Baltimore campaign - BmoreGivesMore which raised $5M in a single day.
Nexthink Library - replacing a ruby on rails application with Scala and SprayMatthew Farwell
Applications without tests (legacy applications) present particular problems to developers when changes are required. Unless the change is very small, they require a lot of manual testing. This is even more true when we wish to completely replace such an application. At Nexthink, we replaced a legacy Ruby on Rails application with a web application written using Spray and Slick. There were two parts, a Rest API, accessed from lots of different version of our products, and an administration web interface to allow editing of the data. In replacing this application, we had to ensure that the new implementation returned exactly the same answers to requests as the old application for the same input criteria, without knowing in advance what the requests were. This presentation shows how a combination of technologies was used to achieve this goal, including: spray - for the reactive http container proxy - the new application was used as a proxy to the old application, and the results were compared with the new application (in production) scalacheck - to generate structured queries on the old and new application, for testing gatling - for performance tests This presentation covers both how the replacement was done, to ensure the minimum number of bugs in production, along with our subsequent experience in production.
Lens is an abstraction from functional programming which helps to deal with a problem of updating complex immutable nested objects. This talk contains different usage of Lenses like QuickLens, Sauron, Scalaz.Lens.
Ansible is a Configuration Management System that is very simple to use, because of its straightforward and robust model for managing automation and it’s low barrier to entry for ease of use in both development and production.
During OpenStack development, Ansible can be used in conjunction with Vagrant and Devstack to manage complex, multi-node development environments with relative ease.
In this presentation, Juergen Brendel and David Lapsley review Ansible and provide some sample playbooks to get developers up and running quickly. They also describes how to use Ansible, Vagrant, Devstack, and OpenStack to accelerate OpenStack development cycles.
Deploying MLlib for Scoring in Structured Streaming with Joseph BradleyDatabricks
This talk discusses developments within Apache Spark to allow deployment of MLlib models and pipelines within Structured Streaming jobs. MLlib has proven success and wide adoption for fitting Machine Learning (ML) models on big data. Scalability, expressive Pipeline APIs, and Spark DataFrame integration are key strengths.
Separately, the development of Structured Streaming has provided Spark users with intuitive, performant tools for building Continuous Applications. The smooth integration of batch and streaming APIs and workflows greatly simplifies many production use cases. Given the adoption of MLlib and Structured Streaming in production systems, a natural next step is to combine them: deploy MLlib models and Pipelines for scoring (prediction) in Structured Streaming.
However, before Apache Spark 2.3, many ML Pipelines could not be deployed in streaming. This talk discusses key improvements within MLlib to support streaming prediction. We will discuss currently supported functionality and opportunities for future improvements. With Spark 2.3, almost all MLlib workflows can be deployed for scoring in streaming, and we will demonstrate this live. The ability to deploy full ML Pipelines which include featurization greatly simplifies moving complex ML workflows from development to production. We will also include some discussion of technical challenges, such as featurization via Estimators vs. Transformers and DataFrame column metadata.
A presentation at Twitter's official developer conference, Chirp, about why we use the Scala programming language and how we build services in it. Provides a tour of a number of libraries and tools, both developed at Twitter and otherwise.
Infographic on Scala Programming LanguagePaddy Lock
One of the few languages that are designed to grow with the user, Scala has been making huge splashes in the world of programming. The term ‘Scala’ is a portmanteau for ‘scalable’ and ‘language’ and the language is known for its ability to combine object-oriented programming and functional programming. Here are a few tidbits about Scala and why it is currently one of the trending languages on the market. Let’s see how it ranks up to another popular programming language, Java.
https://www.eduonix.com/blog/infographics/infographic-on-scala-programming-language/
https://www.eduonix.com/courses/Software-Development/Learn-Scala-Programming-Language-from-Scratch
"In this session, Twitter engineer Alex Payne will explore how the popular social messaging service builds scalable, distributed systems in the Scala programming language. Since 2008, Twitter has moved the development of its most critical systems to Scala, which blends object-oriented and functional programming with the power, robust tooling, and vast library support of the Java Virtual Machine. Find out how to use the Scala components that Twitter has open sourced, and learn the patterns they employ for developing core infrastructure components in this exciting and increasingly popular language."
Scala.js is a compiler that compiles Scala source code to equivalent Javascript code. That lets you write Scala code that you can run in a web browser, or other environments (Chrome plugins, Node.js, etc.) where Javascript is supported. This presentation is an introduction to ScalaJS.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
4. Why we chose Scala
Familiarity with the JVM.
Transforming collections, Guava is still a bit of
a blunt tool.
Static types are cool.
Of the non-Java JVM languages seemed to
have the bigger community.
Commercial Support
23. Why Scala for Tools
Fewer dependencies
Easy to distribute tools
Lots of useful Java libs
Move from Python "felt good"
XML / Pattern match features
Language Scalability
24. How we used Scala - Tools (1)
REPL investigations
Quick Scripts
Setup Tool
Play-based websites
25. How we used Scala - Tools (2)
private val HudsonColorRegex = new Regex(""".*"color":"(w+)".*""")
private def jenkinsBuildStatus(build:models.AutomatedBuild):String = {
val hudsonUrl = build.url + "/api/json"
val result = scala.io.Source.fromURL(hudsonUrl).getLines().mkString
val HudsonColorRegex(color) = result
color match {
case "blue" => GOOD
case "red" => BAD
case "aborted" => BAD
case "disabled" => DISABLED
case "grey_anime" => UNKNOWN // build has not run yet...
case _ => unknownStatus("can't match jenkins build status color of: " + color)
}
}
26. How we used Scala - Tools (3)
getCachedFileSizes(path, revision)
.groupBy{ _.size / groupByBytes }
.map { case (group,files) => group -> files.size }
.toList
.sorted
.foreach {
case (group, count) => data.addRowFromValues(
humanGroupSize(group * groupByBytes,
groupByBytes),
new Integer(count))
}
31. Our Scala Experience
Training - lots of syntax to learn
New language & New paradigms
Tools maturity
Compiler errors
Still learning about maintenance
behaviour
Who we areWhat is scalaWhy we chose itHow we use itWhy you should use it\n\naim for 25 mins tops\n
http://mindcandy.com/\n\nLet’s see a show of hands... and who has actually played?Mindcandy - we make Moshi Monsters, have millions of users and digital entertainment is heart of our company\n\nSean - "Back end" developer\nMark - "Tools" developer\n \n
http://mindcandy.com/\n\nLet’s see a show of hands... and who has actually played?Mindcandy - we make Moshi Monsters, have millions of users and digital entertainment is heart of our company\n\nSean - "Back end" developer\nMark - "Tools" developer\n \n
(not needed for Scala Days)\n\nIMPORTANT HIGHLIGHTS ONLY\n\nWhat are the most relevant bits to us - 5 mins total\n\nStandard blurb is\nScala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.\n\nso what does that mean?\n\nit's functional AND object oriented\n\nit's type safe and uses static typing with compile-time type checks\n\nit compiles to Java Bytecode, runs on the Java Virtual Machine and can call any Java library / be called by java libraries very easily\n\nit can infer types at compile time so you don't have to write them again and again (and again)\n\nit has a REPL console\n\nfocus on productivity / not repeating boilerplate\n\n\nhttp://www.scala-lang.org/node/104 is good reference\nLanguage features of scala\nTraits and Type parameters\nthough you don't need to use (generics) often, they are convenient for library writers\n\nNO MACROS OR TEMPLATES!\n
\n
News feed for the best friends of users.\n\nWhen a best friend does something of note, it should appear in here.\n\nPolled from the client.\n
News feed for the best friends of users.\n\nWhen a best friend does something of note, it should appear in here.\n\nPolled from the client.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
Wanted to avoid the monolithic WAR file accompanied by Tomcat, wired up with Spring.\n\nUsed implicit constructor arguments to perform a simple form of dependency injection, which avoids circular dependencies. However be careful of SI-5618 as specifying types can cause things to be wired with nulls out of order.\n\nUnfiltered provides a clean way to do REST like services that can be easily separated to use elsewhere. Wanted to make components.\n\nAkka allowed us to build a primitive CQRS system internally to the application, creating read and write paths.\n\nIf you're not using Scalacheck, you should be. Helpful to catch the issues you don't think about. Allows me to assume that I'm stupid and that I wont think of everything.\n\nMore a general point, we can write OO/functional/actor based code where it fits most appropriately.\n
\n
From a Tools/Infrastructure POV\n\nPreviously had used Python\n\nlots of 'pure java' libraries I can use e.g. talk to Subversion so few BINARY dependencies\n\nwe already have a JVM on every machine - desktop and server\n\nMakes for very easy deployment of tools to users -- it's just a (big) .jar file\n\nFewer platform differences between Mac/Linux/Win compared to, say, Python\n\nComing from Python, code feels very familiar - terse but can understand it later!\n\nLanguage scalability - from REPL tests / scripts up to big apps - Tools/Infrastructure covers a LOT of different code sizes so having one language that works everywhere is really useful for me\n
Testing pattern matching / parsing with REPL\n\nQuick scripts - e.g. migration of DB update scripts from folder-of-folders to a flat list. -> clean when done functionally\n\nsetup tool using Swing UI\n\nPlay based websites - migrating to play 2\n\n\ntalking to RESTful web services using XML pattern matching\n\nbuilt in regexes make it cleaner\n
PLAY based site\ngood if migrating from Django I think\n\ntwitter for JSON parsing - similar to python's json parse/dump\n\npattern matching / regex parsing make life easier\n\neverything returning a value = cleaner code\n
populating a data table \nties together Java subversion lib, \njava google data visualisation lib, scala logic!\n\nI'm not saying its good Scala, but I found it quite easy to write / understand\n
Game developers especially - great migration path from dynamic scripting languages (Python, Ruby, Lua) that you may already be using.\n\n Looks like a dynamic language, scales up like a static language.\n\nFunctional programming can give very clean, well expressed algorithms so you can focus on that, not on boilerplate.\n\nStrong focus on immutability and message passing means its easier to build scalable/reliable services -- which will strongly interest Game Devs these days!\ne.g. twitter moved from Ruby -> Scala\n\nScala books/docs great!\n\n
Game developers especially - great migration path from dynamic scripting languages (Python, Ruby, Lua) that you may already be using.\n\n Looks like a dynamic language, scales up like a static language.\n\nFunctional programming can give very clean, well expressed algorithms so you can focus on that, not on boilerplate.\n\nStrong focus on immutability and message passing means its easier to build scalable/reliable services -- which will strongly interest Game Devs these days!\ne.g. twitter moved from Ruby -> Scala\n\nScala books/docs great!\n\n
large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
currently using it in 2 production services & as standard language for Tools/Infrastructure\n(alongside Java/Python)\nWill continue to train people up in Scala and use it more\nStill learning what  best "coding standards" will be for Scala to allow people to understand each other's code\n
currently using it in 2 production services & as standard language for Tools/Infrastructure\n(alongside Java/Python)\nWill continue to train people up in Scala and use it more\nStill learning what  best "coding standards" will be for Scala to allow people to understand each other's code\n