In this talk I'll take a piece of code that holds common code-smells that usually can be seen in legacy code and I'll show how to systematically refactor it using TDD.
This talk should help removing the fears that usually accompany developers when need to touch legacy code by presenting a hands on gradual improvement, backed up by tests.
The example case will be using Java but the concepts are not specific to Java and could be applied with any programming language.
A talk presenting how we modelled and designed our services in AppsFlyer:
- How Micorservices work for us, how we deal with deployment, service discovery, SOC, storage etc.
- How the data that is sent to AppsFlyer is modelled as a stream of events which is delivered over Kafka and how using Kafka allows us to easily deploy new services, keeps us resilient and even helps us test our code.
- How using Clojure changed how we reason about code and data and actually changed the way we develop and deploy services
Forter has been using Riemann for almost a year in production to monitor our highly complex distributed system. We are using Riemann as our hub for alerts(Pager Duty), latency and exception reporting(Kibana) , continuous integration and system probes (GitHub). This presentation will cover Riemann patterns for maintenance-mode, state machine based alerts, statistical alerts, system and integration tests based alerts, event enrichment and aggregation for reporting, integration with GitHub status API. Learn how Riemann's unique architecture can scale linearly to handle high event throughput. Ohh yeah, there's going to be Clojure, lots of it.
What is software design? How does it relate to writing code? many of us are using agile methodologies nowadays, but how can we reconcile these with the concept of software design as we currently know it?
In this talk, I will share with the audience my personal journey with Test-Driven Development (and Design) over the last 4 years, a journey that started with me assuming that I know what TDD is and how one should write tests and over time has repeatedly proved me wrong, making me more humble and open to new ideas - and by way of that, helped me become a better engineer.
This is not a talk about code. It's about adopting a Zen-like approach to software design, using TDD as our guide.
Considering migrating your app from Backbone / Angular / Other legacy?
Building interactive dashboards requires state of the art front end application architecture.
This talk unveils a new open source project https://github.com/shaialon/ember-admin-dashboards that will allow you to build your next dashboard rapidly and serve as a starting point for your new application.
The project core uses Ember.js - the leading front end framework for building large scale single page applications (http://builtwithember.io/), together with AdminLTE - the leading admin template on Github. Deployment and asset management are also handled end to end with Heroku and Ember CLI.
The example dashboard uses Twitter's streaming data and includes maps, charts, and drill-down features - using Ember's components ("roughly equivalent to an E restricted, transcluded, isolate-scoped directive in Angular").
Don't forget to star and fork one for your own!
How do you know what 60 millions users like?
Wix.com is conducting hundreds of experiments per month on production to understand which features our users like and which hurt or improve our business.
In this talk we’ll explain how our engineering team is supporting our product managers in making the right decisions and getting our product road map on the right path. We will also present some of the open source tools we developed that help us experimenting our products on humans.
- Deployment workflow: From SCM to production in an heartbeat without loosing any heartbeats.
- Managing image versions: Deploying & Reverting Fast.
- Using Docker API
- How Docker can crash your production and how to avoid that.
- Configuration management and docker
- Where to use Marathon/Mesos and where not.
- Useful scripts for collecting metrics and view logs without accessing the containers.
In a conversation with Chef and Puppet practitioners in the company I heard the same complaint over and over again. Configuration Management is sooo much better than manually configuring servers, but it is painful because all the configuration points that you still need to manage. Enter Service Discovery, a way to connect our different services together with no configuration. Service Discovery is great, but Consul is service discovery and much much more. It solves some of our orchestration issues and does configuration management as well. It is a key value store and a DNS server and its killer feature is Consul Events and Consul Templates.
I want to explain our Consul use cases, what it can do and where we are going with it. It is not one tool to rule them all, but it is a critical piece of our new infrastructure.
Popular culture and sci-fi have introduced us to some pretty cool artificially intelligent characters. But how far are they from reality?
In the last years many advances have been made in the field of artificial intelligence. What has been done so far? What does the future hold? And how scared should we be of meeting a real-life Terminator on the street?
I'd like to give you a glimpse at the answers to these questions. You might be surprised by what you hear and see...
Are you a technical leader in your org, or aspire to be one?
You're packed with great ideas but have no time or people to implement them?
Everyone faces the same condition, yet good leaders manage to do it, I'll share my methodology in 5min or less.
Having a public API is a common approach when companies want to make the shift from being a solution and become a platform.
In the last year, while developing Outbrain's Amplify public API, we had dilemmas, we faced challenges and learned valuable lessons.
In this session I will share what we have learned in term of development, execution and management of a public API, and will talk about things like:
- How to build the development team, and how to set its objectives.
- Why it is important that the business guys your work with will know what is API ?
- Why developing public API is different in term of the involvement of the developers in the business decisions, settings the priorities and meeting the users ?
- Which versioning approach to take ?
- What you should know, and do before launching public API ?
- Testing - Automatic, manual
- "This is not a pure RESTFul" is it a valid argument ?
- How to maintain the internal API together with the public API ?
- How to within the organization the importance of the API ?
- The importance of "eating your own dog food"
Test driven development is a well-known agile methodology that is practiced throughout the software industry. A developer that uses this “test first” approach is more productive, writes less bugs and his coffee tastes better (although I'm not 100% sure about the last statement).
If TDD is so great how can there be software projects that are not developed using it?
Unfortunately there is no lack of stories of bright individuals who tried and failed using TDD; Some even claim that TDD is a complete waste of time.
So who is right – the TDD practitioners or the ones that claim it to be a complete hoax? In this session I’ll discuss Test Driven Development (or is it Test Driven Design) its pro & cons and the when and how to use it in order to succeed in your project.
So you've heard of this newfangled "Scala" thing and think it might be worth checking out. Good for you! Unfortunately, it's also daunting. Your first search for Scala is likely to pitch it as a "statically-typed hybrid object-oriented and functional language", which is technically true but doesn't really help much. Instead, this talk will provide an overview of the language, focusing on five highly practical advantages Scala has over Java without a brain hemorrhage-inducing paradigm shift, followed by some tips and recommendations on Scala adoption in the real world and (as time allows) open-ended Q&A.
JTLocalize is an open source internationalization & localization framework for iOS, developed by JoyTunes.
When we wanted to localize our app Piano Maestro, we discovered that there are several issues that are very hard to deal with using the tools Apple gave us for localizing iOS apps. For instance: effectively internationalizing Interface Builder documents, and handling localization of diffs between different versions of the app.
We eventually developed our own infrastructure, that includes:
- An Objective-C Pod with some localization utilities & localizable UI components for your iOS app.
- A python package & a command line tool that will handle the process of preparing string files for translation, handling diffs between different versions of the app, and more.
setTimeout(myFunc, 0) and you felt cheated, this talk is definitely for you.
Not all skills are created equal, while some are baseline (such as the ability to develop) there are other skills that act as force multipliers. Developers who master these skills can produce better software in a fraction of the time standard developers can.
In this talk I'll go over some of these skills and present how mastering them can make you a developer with superpowers.
Committing to Continuous Delivery at EverythingMe meant that we had step our game up when it comes to version quality visibility.
Our existing solution simply didn't cut it, so we created MAGNETO - "Command your Droids - an open source Android Test Automation framework focusing on speed, ease and visibility.
In this talk I'll elaborate on how this awesome tool came to be, what's so special about it and of course lots of demos.
There are many BI systems. What's different and challenging about dashboard in particular is the combination of simplicity and actionability which makes building and optimization of an interactive dashboard a damn hard problem.
Come and learn more about real life techniques of how to build a big data interactive dashboard.
Yes, there IS such a thing as the Israeli games industry!
As a kid, I dreamt of developing computer games. This dream came true almost by incidence when I stumbled upon my current job, and realized there's a bustling community of Israeli game developers.
I will share with my impressions of this flourishing local industry as a newcomer, and offer a few tips for anyone who wishes to make games for a living.
The local Israeli Open Source communities are very strong, and can be stronger and contribute more if we connect and cooperate with communities elsewhere. I have been working on integrating our local WordPress community with the extended communities for a number of years now, and in this talk I'll give some tips on making this happen for other groups.
Content discovery services (CDS) serve content recommendations to users on publisher sites. Some of those recommendations showcase the publisher's own content, while other recommendations are sponsored by content promoters, who pay the service - and by proxy, the publisher - when users choose to consume their content.
This business model puts the CDS at the center of the triangle consisting of end users, publishers and buyers. Those parties' interests are not aligned, and are sometimes at odds with each other. Despite these differences, many of the underlying optimization problems have similar structure.
This talk will examine the content discovery marketplace from the viewpoints of the different actors, and will show how different business problems boil down to similar computational challenges.
Alongside company (and data) growth at Fiverr we were having a hard time making sure everyone had access to data and insights from all of our databases (internal multiple and separate instances of MySQL, Postgres, Mongo, Redis, CouchBase, Impala, etc) and external data sources (e.g. Google Analytics, New Relic, etc).
So we built an internal tool to enable creation, sharing, running and visualisation of queries over any data source. Now every 'user' (company employee) can run their queries ('How many new users have joined in past 24 hours?', 'What percentage of buyers are from US?', 'Which security question is most popular?'), and any employee can browse others' queries (as well as view their results, in the browser). You only need to know the business question you are interested in, in order to view its data.
App is SPA (in browser) and query-browsing UX is similar to SublimeText browsing - you can browse by folder or by fuzzy-search autocompletion of name/desc of query, which enables very easy orientation. Queries are mostly business-oriented, with the end goal of making sure our employees are as knowledgable as possible about "what's going on" in the company analytics - a growing problem as we scale in terms of business complexity.
The project was naturally made by Israelis (us) and for Israelis (well, us). :)
Present new Open Source project CloudSlang (previously Score) http://www.cloudslang.io/
Show how it eases the creation of process based orchestrations and automations.
Although score orchestration technology can be used in various use-cases, it is designed with DevOps and Day-2 Operations use-cases in mind.
score is coming with "out-of-the-box" Docker and OpenStack capabilities, an easy-to-use CLI and a YAML-based DSL that enables quick creation and triggering of flows”
You have a solid product, you have a team with a proven record to deliver products in high quality and on time - it did that in the alpha and beta phases. Now the big challenge is distribution - How to get millions of users?
This is where we stand today at JoyTunes and we would like to share our "exploration era" guidelines that we established to crack distribution and some of our findings along the way.
- What experiments we run on our customers?
- How we build minimal products/features to disqualify our assumptions?
- What surprising things we learned about our users?
In this 5 minutes lightning talk I will try to explain how I managed to transform my self from a good to a ninja developer using a system I developed called "The Captain's Log".
Each and every one of us has amazing skills and qualities together with some serious pitfalls. Those downsides can make the difference between a mediocare and an outstanding developer. Recognizing what they are is the first step, while the crucial step is overcoming them. Doing that requires a system that you can sustain for years aimed at personal improvment ultimatey affecting your carrer.
The Captain's Log is system that staples a Daily log of your activities much like you see in Star Trek (Captain Picard) but in a Google Doc, and the routines of Scrum: Planning & retrospective on a weekly, quartely and yearly basis.
It's simple yet ultra effective. I've been using this system for 3 years and it did wonders to my professionlism, which why I want to spread the word.
Whether you own a small GitHub project or a part of a well-known application, understanding what people REALLY think about your product is critical. "Talk with your users!” and "Track what they do!" are two of the most common pieces of advice you’ll hear. The problem is that the users you can track or talk to are far and away those that use and like the product. To get a complete view of your product, you need to be able to answer questions like: Why did users leave your product? What do users miss? And how can you bring users back? In this talk, we'll be discussing the following topics:
- How to get ALL users to answer your emails
- How to identify the critical moments when users are about to leave and bring them back
- Which wording to use to get honest feedback
- The important stats you're not using today
- The one question that helped us understand our users' needs
There are many tools to massively stress-test your HTTP/HTTPS service without using hundreds of Amazon EC2 machines (JMeter is not one of them):
ab, siege, weighttp, httperf, wrk
All those tools are written with scalability in mind to support "unlimited" connections with just a few OS native threads. To support that scalabilty, those tools are written in an event model with callback hell in C/C++. Unfortunately, if you need to customize the tools with some specific modification for your service, or just hook the flow for more trace-ability, you are totally screwed because of C/C++ spaghetti code. Also, you need to spent a few hours at stackoverflow.com to successfully compile those changes using complex build tools.
In this session I will talk about an open source tool that I wrote: gobench (https://github.com/cmpxchg16/gobench). This tool gives you the same performance as those hardcore tools thanks to Go (golang), and the ability to modify the code and compile it while still staying sane. This is available thanks to Go and the concurrency simplification it offers, and to a single command to compile a single big statically binary with no dependencies, that will work on any Linux distro! YEAH!
From my experience (on both sides of the hiring process) a lot of people really don't know how to hire developers and I was happy to find out that it's not only my personal experience. It seems there is a shift in the industry which is backed by some articles and blog posts from leading people.
In this talk I will share some of my personal experience and anecdotes but will also back it up with some serious arguments.
- Composable: Because JSR 303 is annotation based, validation rules cannot be composed (annotations cannot receive other annotations as parameters). This is a real problem with some Scala features, for example
Options or collections. Accord's validation rules are trivially composable.
- Simple: Accord provides a dead-simple story for validation rule definition by leveraging macros, as well as the validation call site (see example below).
- Self-contained: Accord is macro-based but completely self-contained, and consequently only relies on the Scala runtime and reflection libraries.
- Integrated: Other than providing its own DSL and matcher library, Accord is designed to easily integrate with other libraries, and provides out-of-the-box integration with Spring Validation, Specs2 and ScalaTest.
Storm is an obvious choice for high-throughput processing but it's a little out of its territory when you also need to maintain low latency. It doesn't have to be that way, though. We at Forter devised a few components and practices to help us build scalable high-throughput and low-latency storm topologies for our real-time fraud detection system. We'd like to share some of the lessons we learned and our ways of handling the issues. From low-latency join bolts to "escape-routes" for sub-topologies, in this talk we'll reveal all the nitty gritty of how we keep our pipeline processing under one second while maintaining data integrity, robust monitoring and code simplicity.
Most companies can't (or won't) open source their code, maybe for good reasons. In this talk I will show how you can open source some of your code, but leave your core business closed source. I will show how I did it in Kaltura with a closed source application and will demonstrate the advantages for this method - which include both technical and cultural advantages.
How to promote helpful code reviews by gamifying the code review process, using the open-sourced github-comment-counter: https://github.com/tzachz/github-comment-counter. Research shows that you can drive people to act by awarding them with points, no matter how meaningless these points are. At Kenshoo, we rank our reviewers and present the leaderboard for all to see, which incurred a ~130% bump in number of code review comments.
Developing your application in Java or in one of the other JVM languages such as Scala, Clojure, Groovy or JRuby?
Basing your infrastructure on a JVM based third party service such as Spark,Cassandra,Storm, Kafka, Elastic Search, Finagle etc?
If the answer to one of the questions is yes you should configure and monitor the JVM Garbage collection logs. Failing to do so may expose you to scalability and latency issues that won't even make sense unless you are aware of the behavior (or misbehavior) of your garbage collector.
In this ignite talk we will briefly learn how to configure the logs and how to interpret them.
In 6 years, Wix grew from a small startup with traditional system architecture (based on a monolithic server running on Tomcat, Hibernate, and MySQL) to a company that serves 60 million users. To keep up with this tremendous growth, Wix’s architecture had to evolve from a monolithic system to microservices, using some interesting patterns like CQRS to achieve our goal of building a blazing fast highly scalable and highly available system.
We all love developing single page web apps, it's fast, snappy, cool, and makes us (developers) happy. Most of the logic lives in the client, and it doesn't need to refresh the page to fetch new data. That's all great but it's comes with lots of flaws like poor SEO, long first page load time and code logic duplication between client and server.
Imagine you can share your view logic between client and server, they both will be able handle routing and rendering pages. This is now possible using Node.js platform.
A cool story about the evolution of our monitoring infrastructure. From the naive approach to a super resilient system.
How do we manage to handle 4M metrics / minute, and over 1K concurrent connections?
What strategies did we try to apply and where did it fail?
What are the techniques and technologies we use in order to achieve this?
How do we handle errors, and failures at this scale?
What can we still improve?
This is not going to be an ordinary reversim talk.
I equally love computer engineering and stand-up comedy. So in this lecture I'm first going give a brief overview of stand-up comedy (in America): history, types and what are the traits of the great stand-up comedians. Following this overview I'm going to show 3 stand-up comedians who used to be engineers and how to managed to connect to the "regular" audience. The presentation will include about 20 minutes of videos (in English), the talk is in Hebrew.
Swift is a shiny new language for iOS development, introduced during WWDC 2014 (June).
We'll try to answer the following questions about Swift:
- Is Swift production ready?
- What is the current state of Swift and its development tools?
- Should you learn Swift or Objective-C if you have no background in iOS development?
- Should you write your next iOS app in swift if you already know Objective-C?
- I have an existing app with an existing Objective-C codebase. Should I:
- Port it entirely to Swift?
- Write new classes in Swift and keep maintaining Objective-C code as is?
- Keep developing it in Objective-C?
- What are some general pros & cons of Objective-C vs. Swift?
- And more...
The vast amount of code available on the web is increasing on a daily basis. Open-source hosting sites such as GitHub contain billions of lines of code. Community question-answering sites provide millions of code snippets with corresponding text and metadata. The amount of code available in executable binaries is even greater. In this talk, I will cover recent research trends on leveraging such "big code" for program analysis, program synthesis and reverse engineering. Along the way, we will consider a range of semantic representations based on symbolic automata, tracelets and numerical abstractions as well as different notions of code similarity based on these representations. Finally, I will show applications of these techniques including semantic code search in both source code and stripped binaries, code completion and reverse engineering.
Dealing with multiple teams in a product development organization is always a challenge.
I would like to share with you a live case study about how we switched from a traditional R&D structure into a small product oriented start-up’s teams.
These are some of the challenges we had to deal with:
How to brake a single product development team into small pieces while keeping autonomy and productivity?
How to use technical guilds to maintain a high technical level, personal development and collaboration between the “distributed” development team?
How to create a culture, based on developer accountability even without a direct manager around?
How to maintain high developers utilization in a small heterogenous feature team (iOS, Android, Web, Infrastructure)?
How we use release trains model for lean development in cross mobile platforms world and, what is our strategy for continuous delivery implementation.
I invite you to hear our personal experience about growing from a small start-up, to a middle size development organization. I invite you to hear how we maintained our developer happiness, start-up culture, productivity and giving each team members the ability to affect the product development (in both product and technical aspects).
After many years of Java development on various projects as a developer or architect and leading other Java developers, I felt that we can do better; we, Java developers, can be more productive. We can achieve more with less ceremonies. We can get things done with less code.
And then I met Groovy. It was not a love at first sight: "Hey, no type declarations? No return statement? No.... ". But then I realized: Under the hood, it is still the same old JVM, the syntax is just different. I can progress at my own pace: Java code is already Groovy code, I can learn feature by feature and then use it at my convenience.
That is what I did. For the first few months my Groovy code was almost a Java code, but as I conquered another feature and another feature I got it: Groovy is not only improved Java, there are many new concepts that I was not aware of them before: dynamic language, closures , functional programming, meta programming and much more.
Thanks to Groovy I became a better developer. Thanks to Groovy I learnt new concepts and now I am not afraid of any new programming language (I already did my first steps with Scala).
Come and hear my ode to Groovy.
In this talk I will share my view on why every Java developer must know Groovy. Groovy may not replace Java in your organization, but it will definitely enrich your professional capabilities and make you a better and more productive developer.
And yes, I will talk about recent 'Groovy/Grails funding announcement' that created a lot of buzz recently, you definitely want to hear what I have to say about it!
Developing for mobile web is nothing like developing for desktop. The browser is slower, the mouse and keyboard interface switched to touch, and the usage profile is different - launch quickly, ditch even quicker. In order to get to a native-like experience, developers need to have a deeper understanding of the browser, know the limitations, and get acquainted with new ways to do things that were traditionally coded in a much more tolerant environment. Animations, caching, forms, data, design, scrolling, event handling, etc. - all these have to be treated differently. I will share my findings from several years exploration of trying to get to that native-like promised land on the small form factor. The presentation will encompass several HTML5 and CSS3 features overview, live HTML examples of animation profiling, and a bit of tooling tips.
So, you have an opensource project at github, now what?
As an author of a successful open source project, I'll share tips and tricks on how to start and maintain an opensource community, best practices and common pitfalls.
We'll also discuss how does one makes a living from opensource :-) and reflect on why open sources is right for you!