Patterns and antipatterns in Docker image lifecycle as was presented at Devop...Baruch Sadogursky
While Docker has enabled an unprecedented velocity of software production, it is all too easy to spin out of control. A promotion-based model is required to control and track the flow of Docker images as much as it is required for a traditional software development lifecycle. New tools often introduce new paradigms. We will examine the patterns and the antipatterns for Docker image management, and what impact the new tools have on the battle-proven paradigms of the software development lifecycle.
When I was introduced to drush, a command line shell and scripting interface for Drupal, I thought, “meh, I can do those tasks already in about the same time with no learning curve.” Now? “Omg omg, do you use drush? You gotta try drush! It’s awesome!”
Find out why drush has transformed me into a groupie. In this session, we’ll walk through installing a Drupal site using drush, enabling modules, and common tasks like running update hooks, cron, and clearing the cache.
Intimidated by the command line? We’ll cover the basics and show you how development tools like Coda enable you to use drush inside a visual environment.
JRuby is a great way to use native Java libraries and get around the project overhead of Java, but how do you actually use Java from JRuby? This talk explores building a JRuby application, backed by the portable Java version of Couchbase Mobile.
While JRuby is build to interface with Java, when calling out to JVM land there are all those little hurdles to overcome. Handling Strings correctly, using native Collection types, and interfacing with libraries which expect those native types instead of the ones provided by JRuby, and last but not least Implementing native interfaces to pass around.
Oh and by the way all of this runs on a little Raspberry Pi!
Patterns and antipatterns in Docker image lifecycle as was presented at Globa...Baruch Sadogursky
While Docker has enabled an unprecedented velocity of software production, it is all too easy to spin out of control. A promotion-based model is required to control and track the flow of Docker images as much as it is required for a traditional software development lifecycle. New tools often introduce new paradigms. We will examine the patterns and the antipatterns for Docker image management, and what impact the new tools have on the battle-proven paradigms of the software development lifecycle.
Patterns and antipatterns in Docker image lifecycle as was presented at Devop...Baruch Sadogursky
While Docker has enabled an unprecedented velocity of software production, it is all too easy to spin out of control. A promotion-based model is required to control and track the flow of Docker images as much as it is required for a traditional software development lifecycle. New tools often introduce new paradigms. We will examine the patterns and the antipatterns for Docker image management, and what impact the new tools have on the battle-proven paradigms of the software development lifecycle.
When I was introduced to drush, a command line shell and scripting interface for Drupal, I thought, “meh, I can do those tasks already in about the same time with no learning curve.” Now? “Omg omg, do you use drush? You gotta try drush! It’s awesome!”
Find out why drush has transformed me into a groupie. In this session, we’ll walk through installing a Drupal site using drush, enabling modules, and common tasks like running update hooks, cron, and clearing the cache.
Intimidated by the command line? We’ll cover the basics and show you how development tools like Coda enable you to use drush inside a visual environment.
JRuby is a great way to use native Java libraries and get around the project overhead of Java, but how do you actually use Java from JRuby? This talk explores building a JRuby application, backed by the portable Java version of Couchbase Mobile.
While JRuby is build to interface with Java, when calling out to JVM land there are all those little hurdles to overcome. Handling Strings correctly, using native Collection types, and interfacing with libraries which expect those native types instead of the ones provided by JRuby, and last but not least Implementing native interfaces to pass around.
Oh and by the way all of this runs on a little Raspberry Pi!
Patterns and antipatterns in Docker image lifecycle as was presented at Globa...Baruch Sadogursky
While Docker has enabled an unprecedented velocity of software production, it is all too easy to spin out of control. A promotion-based model is required to control and track the flow of Docker images as much as it is required for a traditional software development lifecycle. New tools often introduce new paradigms. We will examine the patterns and the antipatterns for Docker image management, and what impact the new tools have on the battle-proven paradigms of the software development lifecycle.
Программируешь? Хочешь весело провести время с нами? Мы предлагаем тебе новый coding dojo framework. «Coding dojo» – это формат, в котором все его участники шаг за шагом выполняют одинаковые задания, но с помощью кода, который пишут в процессе игры.
На этот раз мы все закрутили вокруг старого доброго тетриса. Оказалось, что объяснить кремниевому другу, как играть в тетрис не так-то просто – не то, что человеку. Вот в этом и посоревнуемся.
Что такое tetris coding dojo можно узнать тут http://bit.ly/SNwVkp, а тут http://bit.ly/PPXRRN подглядеть, как dojo проходило в одно из прошлых собраний.
I have run hundreds of test-driven coding dojos using the cyber-dojo app. I see the same test anti-patterns time after time after time. Do some of your tests exhibit the same same anti-patterns?
22,5 Mobile Statistics in 45 Minutes (2012)Lars Brücher
Collections of various statistics regarding mobile usage, smartphone market share, mobile usage in emerging markets.
Slides of a session during MobileCamp Dresden 2012.
Copy is German, but most statistics are English.
To compete effectively in a marketing environment that is changing at an unprecedented rate, we need to do meaningful work and update our skills as the marketing skills gap widens.
Agile Start Me Up - Using the Minimum Viable Discovery (MVD)Chris Chan
"The hardest part of building any software system is determining precisely what to build." - Fredrick Brooks
Discovering exactly what customers, stakeholders, and sponsors want to create is often the most difficult part of product development. Getting everyone aligned can be fraught with misunderstanding and misinterpretation. We often start with a backlog, but how do you know that the development of the product supports the growth of your company.
Getting off on the right foot when starting an Agile initiative can set you up for success. This presentation will outline a basic flow of light touch Discovery workshops as a way to start your agile product development engine.
Presentation from AgileEE 2012 in Kiev (October 2012) and XP Days Ukraine 2012 in Kiev (November 2012) about evolution of Agile processes in team during project lifecycle.
Great functional testing with WebDriver and ThucydidesMikalai Alimenkou
Presentation from online conference ConfeT&QA (October 2012) and Selenium Camp 2013 (February 2013) about techniques and approaches to create great functional automated tests.
“The hardest part of building any software system is determining precisely what to build.” – Fredrick Brooks.
Discovering exactly what customers, stakeholders, and sponsors want to create is often the most difficult part of product development. Getting everyone aligned can be fraught with misunderstanding and misinterpretation. Scrum starts with a product backlog, but how do you know that the development of the product supports the growth of your company?
Getting off on the right foot when starting an agile initiative can set you up for success. This presentation will outline a basic flow of light touch Discovery workshops as a way to start your agile product development engine.
Lightning Talk on an introduction to the Pirate Metrics based on Dave McClure's startup metrics - AARRR (Aquisition, Activation, Retention, Revenue, Referral) related to customer development and innovation. First presented at LAST Conference 2016
Thucydides – next generation acceptance testing with WebDriverMikalai Alimenkou
Presentation from YaC 2012 (October 2012) in Moscow, Selenium Camp 2012 in Kiev (February 2012) about new tool for acceptance testing that has great integration with WebDriver and allows creating clear tests with great reporting.
Anti-fragile: how to thrive in extremistanOliver Damian
Change in the world of technology, media and telecommunications is accelerating fast. Join Oliver Damian in a conversation on what strategies we can employ to cope, even to thrive in this environment
Программируешь? Хочешь весело провести время с нами? Мы предлагаем тебе новый coding dojo framework. «Coding dojo» – это формат, в котором все его участники шаг за шагом выполняют одинаковые задания, но с помощью кода, который пишут в процессе игры.
На этот раз мы все закрутили вокруг старого доброго тетриса. Оказалось, что объяснить кремниевому другу, как играть в тетрис не так-то просто – не то, что человеку. Вот в этом и посоревнуемся.
Что такое tetris coding dojo можно узнать тут http://bit.ly/SNwVkp, а тут http://bit.ly/PPXRRN подглядеть, как dojo проходило в одно из прошлых собраний.
I have run hundreds of test-driven coding dojos using the cyber-dojo app. I see the same test anti-patterns time after time after time. Do some of your tests exhibit the same same anti-patterns?
22,5 Mobile Statistics in 45 Minutes (2012)Lars Brücher
Collections of various statistics regarding mobile usage, smartphone market share, mobile usage in emerging markets.
Slides of a session during MobileCamp Dresden 2012.
Copy is German, but most statistics are English.
To compete effectively in a marketing environment that is changing at an unprecedented rate, we need to do meaningful work and update our skills as the marketing skills gap widens.
Agile Start Me Up - Using the Minimum Viable Discovery (MVD)Chris Chan
"The hardest part of building any software system is determining precisely what to build." - Fredrick Brooks
Discovering exactly what customers, stakeholders, and sponsors want to create is often the most difficult part of product development. Getting everyone aligned can be fraught with misunderstanding and misinterpretation. We often start with a backlog, but how do you know that the development of the product supports the growth of your company.
Getting off on the right foot when starting an Agile initiative can set you up for success. This presentation will outline a basic flow of light touch Discovery workshops as a way to start your agile product development engine.
Presentation from AgileEE 2012 in Kiev (October 2012) and XP Days Ukraine 2012 in Kiev (November 2012) about evolution of Agile processes in team during project lifecycle.
Great functional testing with WebDriver and ThucydidesMikalai Alimenkou
Presentation from online conference ConfeT&QA (October 2012) and Selenium Camp 2013 (February 2013) about techniques and approaches to create great functional automated tests.
“The hardest part of building any software system is determining precisely what to build.” – Fredrick Brooks.
Discovering exactly what customers, stakeholders, and sponsors want to create is often the most difficult part of product development. Getting everyone aligned can be fraught with misunderstanding and misinterpretation. Scrum starts with a product backlog, but how do you know that the development of the product supports the growth of your company?
Getting off on the right foot when starting an agile initiative can set you up for success. This presentation will outline a basic flow of light touch Discovery workshops as a way to start your agile product development engine.
Lightning Talk on an introduction to the Pirate Metrics based on Dave McClure's startup metrics - AARRR (Aquisition, Activation, Retention, Revenue, Referral) related to customer development and innovation. First presented at LAST Conference 2016
Thucydides – next generation acceptance testing with WebDriverMikalai Alimenkou
Presentation from YaC 2012 (October 2012) in Moscow, Selenium Camp 2012 in Kiev (February 2012) about new tool for acceptance testing that has great integration with WebDriver and allows creating clear tests with great reporting.
Anti-fragile: how to thrive in extremistanOliver Damian
Change in the world of technology, media and telecommunications is accelerating fast. Join Oliver Damian in a conversation on what strategies we can employ to cope, even to thrive in this environment
A quick overview of why to use and how to set up iPython notebooks for researchAdam Pah
A quick overview of why to use and how to set up iPython notebooks for research in the Amaral lab. Example notebook is a gist at:
http://nbviewer.ipython.org/gist/anonymous/f8e6d8985d2ea0e4bab1
This talk will try to cover the most important techniques and best practices used when creating Django web application.
Overview of the topics covered:
- development general principles and goals
- python/django project initial setup - project layout, git&venv&pip&shell, settings
- central project shell command - contains all commands to manage project
- "IDE" - editor & shell
- edit/run/test cycle
- deploy/test-remotely cycle
Disclaimer: techniques and practices presented are current AUTHOR'S optimal choice used for usual django project.
Fine-tuning your development environment means more than just getting your editor set up just so -- it means finding and setting up a variety of tools to take care of the mundane housekeeping chores that you have to do -- so you have more time to program, of course! I'll share the benefits of a number of yak shaving expeditions, including using App::GitGot to batch manage _all_ your git repos, App::MiseEnPlace to automate getting things _just_ so in your working environment, and a few others as time allows.
Delivered at OpenWest 2016, 13 July 2016
"Boxen: How to Manage an Army of Laptops", a talk about Boxen and related bits of Puppet thoughts by Will Farrington of GitHub at Puppet Camp San Francisco 2013.
PHP Mega Meetup, Sep, 2020, Anti patterns in phpAhmed Abdou
PHP is one of the easiest programming languages to use ever and powers more than half of the internet.
With this ease of use, certain common patterns emerge that become harmful. This is especially true when your product or service is not expected to die soon. Some anti-patterns are coding, others are related to operating your service, especially with new docker stacks. We will go over some of the most common pitfalls with a focus on enterprise development.
Building a private CI/CD pipeline with Java and Docker in the cloud as presen...Baruch Sadogursky
A private Java (Maven or Gradle) repository as a service can be set up in the cloud. A private Docker registry as a service can be easily set up in the cloud. But what if you want to build a holistic CI/CD pipeline on the cloud of your choice?
Baruch Sadogursky walks you through setting up a universal artifact repository, which can serve for both Java and Docker. You’ll learn how to build a CI/CD pipeline with traceable metadata from the Java source files all the way to Docker images. Baruch uses Amazon, Azure, and Google Cloud as examples, although the recipes shown are applicable to other clouds as well.
Fullstack Academy - Awesome Web Dev Tips & TricksFrances Coronel
Making Sublime Sexy, Themes, Packages, Customizing Your Terminal, Cool OSX Apps, Nifty Chrome Extensions, Wicked Websites, Funsies, and other awesome resources.
First created June 18th, 2015 at Fullstack Academy of Code.
Update July 27th, 2016: This slide deck is shared with all new joiners of Fullstack and Grace Hopper via email!
Docker Container Lifecycles, Problem or Opportunity? by Baruch Sadogursky, JFrogDocker, Inc.
Docker is hot. However, as Docker container use spreads into more mature production pipelines, there can be issues about control of Docker images to ensure they are production-ready. Is a promotion-based model appropriate to control and track the flow of Docker images from development to production? We will demonstrate how to implement a promotion model for docker images, and then show how to distribute them to any kind of consumer, being it a customer or a data center.
Infrastructure as code might be literally impossible / Joe Domato (packageclo...Ontico
HighLoad++ 2017
Зал «Мумбай», 7 ноября, 12:00
Тезисы:
http://www.highload.ru/2017/abstracts/2918.html
This talk will begin by briefly examining what it means for infrastructure to be represented as code. We'll examine some fundamental software components required for automating infrastructure such as GPG, package managers, SSL, and more. We'll examine some interesting failure cases for these tools and how these shortcomings might make infrastructure as code impossible, for now.
In this talk I review snippets of test code. The snippets all come from coding dojos performed on http://cyber-dojo.org.
I see the same test anti-patterns time after time after time. Do some of your tests exhibit the same same anti-patterns?
Explains what a kanban is, and why most kanban boards don't contain any kanbans.
Presented at Lean Kankab UK conference 31st October 2013.
Watch the video here https://www.youtube.com/watch?v=hhHsliAKH84
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
Even though at surface level ‘java.lang.OutOfMemoryError’ appears as one single error; underlyingly there are 9 types of OutOfMemoryError. Each type of OutOfMemoryError has different causes, diagnosis approaches and solutions. This session equips you with the knowledge, tools, and techniques needed to troubleshoot and conquer OutOfMemoryError in all its forms, ensuring smoother, more efficient Java applications.
A Comprehensive Look at Generative AI in Retail App Testing.pdfkalichargn70th171
Traditional software testing methods are being challenged in retail, where customer expectations and technological advancements continually shape the landscape. Enter generative AI—a transformative subset of artificial intelligence technologies poised to revolutionize software testing.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
We describe the deployment and use of Globus Compute for remote computation. This content is aimed at researchers who wish to compute on remote resources using a unified programming interface, as well as system administrators who will deploy and operate Globus Compute services on their research computing infrastructure.
Modern design is crucial in today's digital environment, and this is especially true for SharePoint intranets. The design of these digital hubs is critical to user engagement and productivity enhancement. They are the cornerstone of internal collaboration and interaction within enterprises.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Experience our free, in-depth three-part Tendenci Platform Corporate Membership Management workshop series! In Session 1 on May 14th, 2024, we began with an Introduction and Setup, mastering the configuration of your Corporate Membership Module settings to establish membership types, applications, and more. Then, on May 16th, 2024, in Session 2, we focused on binding individual members to a Corporate Membership and Corporate Reps, teaching you how to add individual members and assign Corporate Representatives to manage dues, renewals, and associated members. Finally, on May 28th, 2024, in Session 3, we covered questions and concerns, addressing any queries or issues you may have.
For more Tendenci AMS events, check out www.tendenci.com/events
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Hivelance Technology
Cryptocurrency trading bots are computer programs designed to automate buying, selling, and managing cryptocurrency transactions. These bots utilize advanced algorithms and machine learning techniques to analyze market data, identify trading opportunities, and execute trades on behalf of their users. By automating the decision-making process, crypto trading bots can react to market changes faster than human traders
Hivelance, a leading provider of cryptocurrency trading bot development services, stands out as the premier choice for crypto traders and developers. Hivelance boasts a team of seasoned cryptocurrency experts and software engineers who deeply understand the crypto market and the latest trends in automated trading, Hivelance leverages the latest technologies and tools in the industry, including advanced AI and machine learning algorithms, to create highly efficient and adaptable crypto trading bots
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar
The European Union Agency for Law Enforcement Cooperation (Europol) has suffered an alleged data breach after a notorious threat actor claimed to have exfiltrated data from its systems. Infamous data leaker IntelBroker posted on the even more infamous BreachForums hacking forum, saying that Europol suffered a data breach this month.
The alleged breach affected Europol agencies CCSE, EC3, Europol Platform for Experts, Law Enforcement Forum, and SIRIUS. Infiltration of these entities can disrupt ongoing investigations and compromise sensitive intelligence shared among international law enforcement agencies.
However, this is neither the first nor the last activity of IntekBroker. We have compiled for you what happened in the last few days. To track such hacker activities on dark web sources like hacker forums, private Telegram channels, and other hidden platforms where cyber threats often originate, you can check SOCRadar’s Dark Web News.
Stay Informed on Threat Actors’ Activity on the Dark Web with SOCRadar!
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
Design and Evolution of cyber-dojo
1. twitter : @JonJagger
email : jon@jaggersoft.com
blog : http://jonjagger.blogspot.co.uk/
charity : http://cyber-dojo.org
the design and
evolution of
cyber-dojo
Hi. I'm Jon Jagger, a self-employed software consultant. I love fly fishing for salmon fishing. If you hire me and you're near a salmon river I'll reduce my rate!
3. One evening I attended a code dojo being held in the Scotsman pub.
4. In case you're not familiar with the word, Dojo is the Japanese name for the place where martial artists meet to practice their martial art. So a code dojo is where coders
meet to practice coding.
Uncle Bob was the guest of honour. He selected the battleships coding exercise and also specified the language (I think it was Ruby) and the test framework. There were
about 30 developers - split into 6 teams of 5 people. We then had about 90 mins to code, after which each team would connect their laptop to a projector and show their
work. At least, that was the plan.
5. Somewhat predictably, most of the groups struggled to connect their laptop to the projector. Quite a lot of time was wasted.
6. Two groups didn't have much to show as they had spent more than half the time struggling to install the language and test-framework Uncle Bob specified. But
eventually everyone had shown their work and Uncle Bob pronounced one group the winners. Which was a bit strange.
7. In my hotel room that night I was thinking about the wasted time. Suppose everyone had been working in a shared cloud-based environment? There would have been
nothing to install. Only Bob's laptop would need connecting to the projector. The more I thought about this idea the more I liked it.
8. At some points in your life there are times where you decide something is worth spending your time on. This was a moment for me. I decided to build an IDE, an
Interactive Dojo Environment.
I rolled my sleeves up and started learning lots of new stuff I'd need. I didn't know any Ruby, HTML, CSS, Rails, Javascript, etc.
9. https://github.com/cyber-dojo/web
It's called it cyber-dojo.
It's open-sourced on github.
The first commit was in January 2010.
It's now 2016 and 8888 commits later.
Things don't come into existence instantly!
15. Interactive
Dojo
Environment
Integrated
Development
Environment
• make money
• individual based
• finish focused
• test driven?
• work faster
• time pressure
• don't repeat
• have fun
• team based
• learning focused
• test driven
• work slower
• no time pressure
• repeat
It was clear to me from the beginning that a cloud-based environment designed for coding dojos should be different to a regular development environment....
16. • team based • individual based
• no login
• anonymity
No login. No username, password. Anonymity is very important. When reviewing we cannot talk about Bert and Ernie's code. We can only talk about the Lion's code.
Bert and Ernie can decide whether or not they want to reveal that they are the Lion.
17. • learning focused • finish focused
I have come to realise that developers derive enormous value from simply having their steps replayed to them. For example this is a real example from some consulting I
did recently in Bangalore. From the burst of green traffic lights it looks like the koala is refactoring. They are refactoring the duplication out of their tests. Nice. Although,
as another developer pointed out, the use of the word if in the assert helper is a bit dubious.
18. tests ran
one or more failed
tests ran
all passed
tests did not run
I extend the standard red/green fail/pass colour scheme.
I complete the traffic-light by using amber for cases when the tests do not run (eg syntax error)
19. {
"visible_filenames": [
"README",
"Hiker.feature",
"Hiker.java",
"HikerStepDef.java",
"RunCukesTest.java",
"cucumber.xml",
"cyber-dojo.sh"
],
"filename_extension" : ".java",
"display_name": "Java, Cucumber-Spring",
"image_name": "cyberdojofoundation/java_cucumber_spring",
"red_amber_green" : [
"lambda { |output|",
" return :red if /FAILURES!!!/.match(output)",
" return :green if /OK ((d*) tests)/.match(output)",
" return :amber",
"}"
]
}
.../Java/Cucumber-Sprint/manifest.json
Determining the red/amber/green static happens in a simple function held in the language+test_framework's manifest. It's typically implemented using simple regular
expression matchers.
20. One of the things cyber-dojo is very effective at (which I had not anticipated) is how well a short 45 minute practice session can mimic problems normally associated with
large projects typically running for months and years. For example, waterfall development, when stuff is endlessly 90% done and overruns.
In the above dashboard (from the same trip to Bangalore) note that the two animals with the fewest traffic lights are the frog and the snake. Note the time-gap (left to
right) before their first visible traffic-light, which, almost inevitably, is amber. Note too the burst of ambers following this initial amber as they try to "recover". The frogs
just got to green in time (lucky) but the snakes did not (very typical). Again, inevitably, the snakes ask for a little bit more time! They're almost done, they say. But no.
There is no more time. We are not shipping anything!
23. 2010 - No security!
(frequent backups)
In cyber-dojo arbitrary code is written in the browser and run on the server!!!! This has obvious security implications.
Yet the first version had no security. Really!
It was the simplest thing that could possibly work.
I had mostly built cyber-dojo for myself.
When I used cyber-dojo during paid consultancy I would simply spin up my own personal server.
25. .py
Python
pytest
apt-get update && apt-get install --yes
libsqlite3-dev
sqlite3
bzip2
libbz2-dev
wget
wget http://www.python.org/ftp/python/3.3.5/
Python-3.3.5.tar.xz
tar xJf ./Python-3.3.5.tar.xz
cd ./Python-3.3.5 && ./configure --prefix=/opt/
python3.3
cd ./Python-3.3.5 && make
cd ./Python-3.3.5 && make install
ln -s /opt/python3.3/bin/python3.3 /bin/python
apt-get update && apt-get install -y
python-pip
pip install -U pytest
Python
pytest
It really was just the server. For example, to support Python using pytest (on the browser), then Python and pytest had to be installed on the server.
26. .py
.py
Python
pytest
Python
pytest
When the dev hit the test button on the browser the source files were copied on to the hard-disk of the server and run directly on the server! There was no security. No
chroot. Nothing!
27. $ cd /
$ rm -rf *
2013
This worked fine for several years on the public cyber-dojo.org server until one day someone ran the above code! They sent me a nice email saying how sorry they were,
that they had just assumed it wouldn't work!!
It was an ex server.
28. 0.3
I looked for ways to provide security. A new, little known (at that time) technology called Docker caught my eye. It was at about 0.3 then. Docker went open source in
March of 2013.
29. FROM cyberdojofoundation/build-essential
MAINTAINER Jon Jagger <jon@jaggersoft.com>
RUN apt-get update && apt-get install --yes
libsqlite3-dev
sqlite3
bzip2
libbz2-dev
wget
RUN wget http://www.python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
RUN tar xJf ./Python-3.3.5.tar.xz
RUN cd ./Python-3.3.5 && ./configure --prefix=/opt/python3.3
RUN cd ./Python-3.3.5 && make
RUN cd ./Python-3.3.5 && make install
RUN ln -s /opt/python3.3/bin/python3.3 /bin/python
RUN apt-get update && apt-get install -y
python-pip
RUN pip install -U pytest
Dockerfile
Now the commands to install Python and pytest go into a file called Dockerfile.
30. cyberdojo/python_pytest
$ docker build -t cyberdojo/python_pytest .
FROM cyberdojofoundation/build-
essential
MAINTAINER Jon Jagger <jon@jaggersoft.com>
RUN apt-get update && apt-get install --yes
libsqlite3-dev
sqlite3
bzip2
libbz2-dev
wget
RUN wget http://www.python.org/ftp/python/
3.3.5/Python-3.3.5.tar.xz
RUN tar xJf ./Python-3.3.5.tar.xz
RUN cd ./Python-3.3.5 && ./configure --
prefix=/opt/python3.3
RUN cd ./Python-3.3.5 && make
RUN cd ./Python-3.3.5 && make install
RUN ln -s /opt/python3.3/bin/python3.3 /bin/
python
RUN apt-get update && apt-get install -y
python-pip
RUN pip install -U pytest
Dockerfile
Then, on a system with docker installed, you build your named docker image from the Dockerfile.
You've then got your image.
31. cyberdojo/python_pytest
.py .py
Python
pytest
Every time the dev presses the test button in the browser, the rails server spins up a docker-container from the appropriate docker-image (in this case the one for python
+pytest), copies the files into the container, and runs the test inside the container, grabs the output, and then destroys the container (but not the image). Creating a new
container from an image is almost instantaneous!!
32. The images for the 50+ language&test_framework combinations offered on the setup page are all stored on the docker hub and can be pulled freely by anyone who has
installed docker.
33. more animals!
2015
At first there were only 16 animals. Several people asked to be able to run practice sessions with a hundred or so participants and 16 was not enough. I needed more
animal images! My friend Dymtro Mindra paid a professional artist (Nadya Sivers) to draw 64 new images. Aren't they great :-)
34. setting up
your own
server was
lengthy and
error-prone
The biggest remaining problem was for people who wanted to run their own servers. Installing the rails server was lengthy and error prone.
36. cyberdojo/python_pytest
.py cyberdojo/web:1.12.1
.py
Python
pytest
1.12.1
Eagle eyed readers will spot there is a problem putting the rails server inside a docker image. The rails server issues docker commands to run the tests submitted from
the browser. But docker is installed on the server, not inside the image holding the rails server!
So I also had to install docker inside the web image. This is sometimes called docker-in-docker. This creates a version dependency. The version of docker installed on the
server (which spins up the web container) must match the version of docker installed inside the web container (which spins up the python_pytest container).
Now installation is mostly installing docker and pulling the pre-built cyber-dojo docker images.
37. FROM cyberdojo/user-base
MAINTAINER Jon Jagger <jon@jaggersoft.com>
...
USER root
RUN apk --update add
ruby ruby-irb ruby-io-console ruby-bigdecimal tzdata
bash
ARG CYBER_DOJO_HOME
USER root
RUN mkdir -p ${CYBER_DOJO_HOME}
COPY Gemfile ${CYBER_DOJO_HOME}
RUN apk --update
add --virtual build-dependencies
build-base
ruby-dev
openssl-dev
postgresql-dev
libc-dev
linux-headers
&& gem install bundler --no-ri --no-rdoc
&& cd ${CYBER_DOJO_HOME} ; bundle install --without development test
&& apk del build-dependencies
...
Dockerfile
cyberdojo/web:1.12.1
docker
build
Here's part of the Dockerfile for the cyber-dojo web image. It shows the commands to install ruby and setup the rails server.
38. FROM cyberdojo/user-base
MAINTAINER Jon Jagger <jon@jaggersoft.com>
...
ARG DOCKER_VERSION
USER root
RUN apk --update add curl
&& curl -OL https://get.docker.com/builds/Linux/x86_64/
docker-${DOCKER_VERSION}.tgz
&& tar -xvzf docker-${DOCKER_VERSION}.tgz
&& mv docker/* /usr/bin/
&& rmdir /docker
&& rm /docker-${DOCKER_VERSION}.tgz
&& apk del curl
...
Dockerfile
cyberdojo/web:1.12.1
docker
build
Here's part of the Dockerfile for the cyber-dojo web image. It shows the commands to install docker!
40. #!/bin/sh
set -e
my_dir="$( cd "$( dirname "${0}" )" && pwd )"
cd ${my_dir}/../docker/web-base
./build-image.sh
cd ${my_dir}/../docker/web
./build-image.sh
cd ${my_dir}/../cli
./cyber-dojo down
./cyber-dojo start-point ls --quiet | grep 'languages' && ./cyber-dojo start-point rm languages
./cyber-dojo start-point ls --quiet | grep 'exercises' && ./cyber-dojo start-point rm exercises
./cyber-dojo start-point ls --quiet | grep 'custom' && ./cyber-dojo start-point rm custom
./cyber-dojo start-point ls
./cyber-dojo start-point create languages --dir=./../../start-points-languages
./cyber-dojo start-point create exercises --dir=./../../start-points-exercises
./cyber-dojo start-point create custom --dir=./../../start-points-custom
./cyber-dojo start-point ls
./cyber-dojo up
cid=`docker ps --all --quiet --filter "name=cyber-dojo-web"`
docker exec ${cid} sh -c "cd test && ./run.sh"
done=$?
exit $done
test/build_and_run.sh
I have rails installed locally on my macbook. However, I do not run the tests locally. That would be simple, but it would be a trap. This is because the code being tested
would not be running inside a docker container. Yet when the code really runs (after being deployed) it always runs inside a docker container. So instead I run a script
which rebuilds the docker web image, starts a new web container, shells into this container, and runs the tests.
41. ...
env:
global:
- DOCKER_ENGINE_VERSION=1.12.1
- DOCKER_COMPOSE_VERSION=1.8.0
- DOCKER_DIR=${TRAVIS_BUILD_DIR}/docker
before_install:
# list docker-engine versions
- apt-cache madison docker-engine
# install specific version of docker-engine
# install specific version of docker-compose
...
.travis.yml
github has an excellent feature whereby every commit can trigger a Travis continuous integration (CI) pipeline. I use this on the cyber-dojo web repo. The script github
runs installs specific versions of docker and docker-related tools...
42. ...
script:
# Build the cyber-dojo web image
- cd ${DOCKER_DIR}/web
- ./build-image.sh ${DOCKER_ENGINE_VERSION}
- cd ${TRAVIS_BUILD_DIR}/cli
- ./cyber-dojo up
- cid=`docker ps --all --quiet --filter "name=cyber-dojo-web"`
- docker logs cyber-dojo-web
- docker inspect -f {{.State.Running}} ${cid}
- docker ps -a
- docker pull cyberdojofoundation/gcc_assert:latest
- docker pull cyberdojofoundation/ruby_test_unit:latest
.travis.yml
- docker exec ${cid} sh -c "cd test && ./run.sh"
...and then builds the web image, starts a new web container, shells into this container, and runs the tests. Just like when I run the tests myself :-)
43. Here's an example of the output you get from travis CI when the tests are run inside the docker container.
44. This is the dashboard for the Travis Continuous Integration. The various github repos are listed on the left. On the right are results from recent commits on the selected
github repo (web).
45. thank yous
Byran Wills-Heath Nadya Sivers Seb Rose
Olve Maudal Dymtro Mindra Mike Long
A big thank you also to these people who have all helped with cyber-dojo in various ways.
46. twitter : @JonJagger
email : jon@jaggersoft.com
blog : http://jonjagger.blogspot.co.uk/
charity : http://cyber-dojo.org
that's all
folks
That's it. Thanks for listening. I hope I've sowed a few seeds. Have a great conference.