News
Content:
-
June 1, 2023: Monitor Your TeamCity Builds with Datadog CI Visibility
-
May 30, 2023: TeamCity 2023.05: Dark Theme, Agent Terminal, and More
-
May 4, 2023: JetBrains Academy’s New Projects and Topics: May Update
-
April 6, 2023: JetBrains Academy’s New Projects and Topics: April Update
-
February 23, 2023: JetBrains Academy Plugin 2023.2 Is Available
February 3, 2023:
New month – new stories! The February edition of Java Annotated Monthly is here, featuring industry news and trends, helpful tutorials, and step-by-step screencasts. This JAM offers several interesting forecasts about Java and other technologies for the upcoming year. Finally, the Culture and Community section includes a detailed, by-the-numbers analysis of 2023.
Let’s see what people were talking about in the world of technology in January.
Java News
Java News Roundup 1, 2, 3, 4 – Read the blog posts to be sure you haven’t missed any important updates or improvements.
Time for pudding… and another Panama update – If you’ve been following the progress of JEP 434: Foreign Function & Memory API (Second Preview), this article may interest you.
Java’s Plans for 2023 – Inside Java Newscast – Nicolai Parlog gathered all of the plans for the current Java projects (Loom, Galahad and Leyden, Panama, Lilliput, Valhalla, and Amber) for 2023.
Quality Outreach Heads-up – JDK 21: JMX Subject Delegation & Fine-grained Security Deprecation – Don’t miss the features listed for deprecation in JDK 21.
Java Tutorials and Tips
Using Pattern Matching – Read this comprehensive tutorial to learn more about pattern matching and how to write cleaner code using its different variations. The article covers pattern matching for Instanceof, Switch, and Enhanced for statements, as well as guarded and record patterns.
Java 20: Colossal Sparse Memory Segments – Per Minborg, a Java Core Library Developer at Oracle, shares his knowledge about how mapped memory segments can help allocate 64TB of sparse data on a laptop.
Java 20: An Almost Infinite Memory Segment Allocator – This article continues the narrative of the previous one. In it, Minborg explains how to create a new InfiniteArena class that will help return an almost infinite amount of native memory without ever throwing an OutOfMemoryError.
Episode 28 “Java Language – State of the Union” – Listen to this episode to learn more about Project Amber’s Pattern Matching and String Templates features.
From ThreadLocal to ScopedValue with Loom – JEP Café #16 – In just 18 minutes, you will understand how ScopedValue works and how to use it as an incubator feature in JDK 20.
Secure Coding Guidelines for Java SE – This video episode is for you if you want to avoid insecure practices when using Java SE. It also includes an overview of the recent updates, including expanded guidance on topics such as deserialization, exception and error handling, and others.
Episode 29 “Helidon Níma & Virtual Threads” – Tomas Langer, the Helidon architect, explains Helidon Níma – the first Java microservices framework built from the ground up on virtual threads.
Getting Started With Java Development in 2023 — An Opinionated Guide – A detailed guide for Java beginners that includes key opinions and helpful links.
Hidden gems in Java 19, Part 2 – This article digs into underappreciated features included in the Java 19 release apart from the main seven that people have already discussed many times.
Why Picnic Picked Java – Sander Mak, Director Of Technology at Picnic Technologies, describes why and how his company picked Java as a programming language.
Building JavaFX with Gradle – This article contains examples of modular and non-modular versions of the build.gradle build script with explanations in the comments.
Java Development Trends 2023 – Do you follow the trends in programming or prefer more traditional approaches?
Handling Virtual Threads – This article introduces different strategies for implementing virtual threads.
Functional Classes – Should you subdivide a functional program into classes like an object-oriented program? Join the discussion.
Languages, Frameworks, Libraries, and Technologies
This Week in Spring – 1, 2, 3, 4 – All of the latest news and updates are conveniently grouped in these articles.
The new Spring Boot version validation and upgrade support in Spring Tools – Since Spring Boot releases are pretty frequent, you may want to learn the best practices for painless updates.
A Bootiful Podcast: Spring legend Ramnivas Laddad – Ramnivas Laddad is the founder of Spring Cloud Connectors and Cloud Foundry and an honored guest on the Bootiful podcast.
AsyncGetStackTrace: A better Stack Trace API for the JVM – Read this article to learn why AsyncGetStackTrace is a better version of AsyncGetCallTrace.
Cloud Run Health Checks — Spring Boot App – This article describes how Cloud Run services can configure startup and liveness probes for a running container.
Developer Docs + GenAI = ❤️ – If you are a technical writer interested in trending AI and machine learning technologies, this article is for you. You’ll learn how these innovations can help in your daily writing routine.
What’s New in Jakarta REST 3.1 in Jakarta EE 10? – Luqman Saeed explores two noteworthy features: a new API to bootstrap REST resources outside of a container and multipart support.
Writing a Profiler from Scratch: The Profiling Loop – This is the second post in a series describing how to write a profiler’s primary loop.
JVM Kubernetes: Optimizing Kubernetes for Java Developers – The problem with running Java applications in a Kubernetes environment is that the default settings that don’t work well for the JVM. Dariusz Wawer looks into this problem and offers a solution.
Interesting new filters on Spring Cloud Gateway 4.0 – Find out how the newly added filters help you get more insight into your applications. The following filters are described: CacheRequestBody, LocalCacheResponseBody, AddRequestHeadersIfNotPresent, and RemoveJsonAttributesResponseBody.
A Brief Overview of the Spring Cloud Framework – Read this article to get an overview of the Spring Cloud framework, a list of its main packages, and their relation to the Microservice Architectural patterns.
The Quest for REST – This blog post lists some of the issues with REST and provides hints at ways to solve them.
On Markdown in (Java) documentation comments… – Jonathan Gibbons explains why Oracle is investigating the possibility of supporting Markdown in Java documentation comments and what challenges they face.
An Opinionated Guide To Getting Started With Jakarta EE Development in 2023 – If you are just getting started with Jakarta EE and feel overwhelmed by all the information out there, Luqman Saeed has gathered all the helpful resources in the article.
Foojay Podcast #12: State and Future of the IDEs – Will IDEs survive in the future? How do they need to evolve, and what challenges do they face to stay up to date? These and other questions are discussed in this podcast.
How to Check Docker Images for Vulnerabilities – In this blog post, you’ll learn how to perform a vulnerability scan and fix the detected issues.
Kotlin Corner
Kotlin 1.8.0 Released – This release brings major updates like new experimental functions for the JVM that allow you to copy or delete directory content recursively, improved kotlin-reflect performance, and a new -Xdebug compiler option for a better debugging experience. More updates in this post!
Kotlin 1.8.0 Released – Kotlin 1.8.0 is out, bringing the possibility to recursively copy or delete directory content, improved kotlin-reflect performance, the new -Xdebug compiler option for a better debugging experience, and more.
Kotlin 1.8.0 Standard Library Update – In this video, Anton describes the updates for Kotlin 1.8.0 standard library, including stabilization of the existing features, an introduction of comparable and subtractable time marks, and java.nio.file.path extensions for recursive deleting and copying.
Creative Coding with Kotlin and Compose – Have you ever tried to be unconventional with Kotlin? Watch this video to see how Compose Multiplatform can help you reveal your creativity in coding.
Optimize Your Kotlin Performance – Profiling, Micro-optimizations, and Precomputing – Duncan McGregor shows how to improve the performance of the previously generated multi-word anagrams.
Running Kotlin coroutines on Project Loom – Read this article to learn how the virtual threads preview feature allows you to effectively turn the blocking code into something non-blocking while still being coroutine compatible.
Kotlin Is More Fun Than Java And This Is a Big Deal – Jasper Sprengers meditates on the perks of Java and Kotlin. Do you agree with his thoughts?
Project Loom And Kotlin: Some Experiments – Check out this article to dive into the performance of virtual threading functionality with Project Loom and Kotlin.
Culture and Community
Happy 0x7E7! – Take a deep dive into what the number 2023 can show us.
Empowering Women in STEM & Building Inclusive Teams through Cooking – Did you know that women typically leave STEM fields after 5–7 years? Listen to this podcast to learn what factors drive women away and how to find the key to creating an environment where people feel empowered.
Podcasts I listen to: more than 80 recommendations – If you’ve been lost in an infinite pool of technical podcasts, Tomasz Nurkiewicz has shortened his list to just 80.
Five books every developer should read – This is a nice selection of books for those still searching for their personal coding style.
Don’t be like Ebenezer Scrooge. A few words about workaholism – This blog post is a kind reminder to developers around the globe to take vacations and spend time with their loved ones.
How Behaviour-Driven Development Helps Those with Sleep Disorders Contribute Effectively – You’ll be surprised to learn how many people fight sleep disorders in the workplace. What can be done to help people with these conditions and allow them to work productively? Find out in this article.
2022 Year in Review: ADRs, Staff Plus, Platforms, Sustainability, and Culture Design – Several speakers discuss the past year’s trends and share their vision for 2023. The topics in question are the benefits of architecture decision records (ADRs), the role of Staff Plus engineers, treating platforms as products, the importance of sustainability and green IT, and the need to be deliberate with culture design.
Why Many Developers Don’t Write or Give Talks and How to Overcome Challenges – If you are one such developer but feel you have the expertise to share with the world, this article contains some handy solutions.
Quality and effort – Struggling to be more careful with your code or job in general? Read this article to find out what you can do about it.
Conferences and Events
6 Essential Tracks at QCon London, March 27-29, 2023: Architecture, FinTech, ML, and More! – The 17th edition of the QCon London international software conference returns March 27–29, exploring 15 tracks focused on the emerging trends and practices the organizers believe will have the greatest impact on software development. This article covers six stand-out tracks that you might be particularly interested in.
And Finally
IntelliJ IDEA 2023.1 EAP Is Open! – We’ve started a new release cycle and opened the Early Access Program. Join in to test new features and share your feedback.
IntelliJ IDEA: Managing Dependencies – Watch this screencast to learn how to add dependencies to your project and update and remove dependencies using Package Search.
Qodana and IntelliJ IDEA: How a Code Quality Platform Streamlined the Localization of an IDE – Find out how the IntelliJ IDEA team rose to the challenge of localizing the IDE’s entire UI into Chinese, Japanese, and Korean with the help of Qodana, the code quality platform from JetBrains.
Summary of IntelliJ IDEA Conf 2022 – If you missed any of the sessions we held during IntelliJ IDEA Conf 2022, you can find all of them gathered in this blog post for your convenience.
IntelliJ IDEA Ultimate: Package Checker – The Package Checker plugin bundled in IntelliJ IDEA Ultimate allows you to analyze your code and detect vulnerable dependencies.
February 23, 2023:
Today’s update brings an exciting change to the EduTools plugin. It has a new name – the JetBrains Academy plugin! This change reflects our new vision for the educational products and initiatives at JetBrains. Rest assured, all of the features and functionality that you’ve come to rely on are still present and have been improved in this release.
For this update, we’ve focused primarily on improving the plugin’s overall functionality by fixing bugs. Additionally, we’ve implemented a new feature for the course creators that enables learners to view the full text in the Answer Placeholder window without any limitations.
To check out the improvements, install the JetBrains Academy plugin or update to the latest version from Settings/Preferences | Plugins in your JetBrains IDE.
Add an extended text block to the Answer Placeholder window
We’ve added a vertical scroll bar to the Answer Placeholder window, allowing users to see the full text without limitations. Answer Placeholder is a feature that shows students exactly where to write the code. As a course creator, the updated scroll bar allows you to provide more detailed feedback to the learners when creating code exercises.
To create a placeholder, simply select a code fragment you want learners to fill in, invoke the Add Answer Placeholder command from the context menu, and add the placeholder text.
If you want to learn more about the plugin’s features for course creators, check out our Course creator start guide or drop us an email at academy@jetbrains.com.
Notable improvements and bug fixes:
-
EDU-5544: Python courses are now open in PyCharm as expected. The plugin automatically creates a virtual environment and installs Python dependencies without any issues.
-
EDU-5542: We’ve fixed the issue that was causing the appearance of an unexpected Trust and Open Project window when opening the AMazing course.
-
EDU-5524: The output tab in the Check details tool window has been renamed to Feedback.
-
EDU-5584: The time it takes to check code tasks on Hyperskill has been reduced.
-
EDU-5221: When unpacking archives with multiple SDK versions, the plugin will now use the same versions as in the creator’s project.
For the full list of issues addressed in the JetBrains Academy plugin 2023.2, see our issue tracker.
Please share your feedback with us in the comments section below or on Twitter, and use our issue tracker to report any issues or bugs you encounter.
April 2, 2023:
DataSpell 2023.1 EAP 2 is Out!
Many DataSpell users requested the ability to organize their work into multiple projects with completely separate environments and in DataSpell 2023.1 EAP 2 we have delivered!
This second EAP build also contains new features to convert a Jupyter Notebook into a Python script and vice versa, to drag and drop a CSV to create a Pandas DataFrame, and to change the default number of rows displayed for a DataFrame. Finally, debugging and package management just got easier with an interactive debug console in the Jupyter Notebook Debugger and a fully functional Python Packages Tool Window.
The Toolbox App is the easiest way to get EAP builds and keep your stable and EAP versions up to date. You can also manually download the EAP builds from our website.
Support Multiple Projects With Separate Environments
In DataSpell 2022.3, the IDE has a single workspace, to which you can attach notebooks and other files, directories, and projects. Existing projects are attached to the workspace as directories. By default, all directories and projects in the workspace share the same virtual environment or Python interpreter as the workspace. DataSpell’s workspace is, in essence, the default project.
However, many users requested the ability to manage multiple projects, each of which has its own separate virtual environment or interpreter rather than inheriting it from the workspace. This model is more in line with other JetBrains IDEs like PyCharm.
In DataSpell 2023.1 EAP 2, we introduce the option to continue to use the single workspace model with attached directories or to work with multiple completely separate projects each of which has its own virtual environment or Python interpreter and potentially a Git repository.
From DataSpell’s Welcome screen, select the Projects option in the left pane to see a list of existing projects, open projects or create new R or Python projects. You can also create and manage projects from the main File menu.
To continue to use DataSpell with a workspace, select the Quick Start option in the left pane of the Welcome screen, configure a default environment and click Launch DataSpell.
Convert a Jupyter Notebook to a Python Script and Vice Versa
In DataSpell 2023.1 EAP 2 you can convert a Python script (.py file) to a Jupyter Notebook (.ipynb file) and vice versa in a few clicks.
Convert a notebook to a Python script by opening the File context menu | Refactor | Convert To Python File. Convert a Python script to a notebook by opening the File context menu | Refactor | Convert To Jupyter Notebook.
Drag and Drop a CSV to a Create a Pandas DataFrame
Creating a Pandas DataFrame from the data in a CSV file is a common task in data science. In DataSpell 2023.1 EAP 2, you can drag and drop a CSV (.csv file type) into a Jupyter Notebook and a Pandas DataFrame will be automatically created from the contents of the file.
Change the Default Number of Rows Displayed for a DataFrame
In DataSpell 2022.3, when a DataFrame is displayed in tabular form, only the first 10 rows are shown and this default cannot be changed. You can now reset the default number of rows displayed per page by clicking on the number of rows at the top of the table to get a list of page sizes and then setting the desired number of rows using the Change Default dialog.
Interactive Debug Console in the Jupyter Notebook Debugger
In previous versions of DataSpell, the debug console was disabled when debugging Jupyter Notebooks. In DataSpell 2023.1 EAP 2, you can use the console to send commands to the Jupyter Debugger, and view outputs and error messages, while debugging Jupyter Notebook cells.
Replace Absent Kernel for a Jupyter Notebook
When the kernel listed in a Jupyter Notebook’s metadata is absent, e.g. when the Notebook has been copied from another machine, DataSpell 2023.1 EAP 2 ignores the metadata kernel and switches to using the default DataSpell kernel with the Notebook.
Notable Fixes
Cell Execution Start Time and Duration
In DataSpell 2023.1 EAP 1 we introduced a feature to show when a code cell was last executed and the duration of the cell execution. This information is displayed directly below Jupyter Notebook cells. DataSpell 2023.1 EAP 2 includes fixes which ensure that the correct cell execution duration is shown when cells are executed using Run All and when a file is closed and reopened.
-
DS-4597: Cell execution duration is wrong when execute cells using Run all
-
DS-4510: Execution time is dropped on editor reopening
Python Packages Tool Window
The Python Packages tool window is the quickest way to manage packages and preview package documentation for a particular environment or Python interpreter. DataSpell 2023.1 EAP 2 fixes an issue which caused incorrect packages to be shown for the Python interpreter of a project attached to the workspace.
The Python Packages tool window is enabled by default. You can find it in the lower group of the tool windows or open it from the main menu: Window | Tool Windows | Python Packages. You can preview package documentation in the documentation area.
-
PY-54800: “Python Packages” tool window doesn’t show packages for attached projects
These are the most important updates for DataSpell 2023.2 EAP 1. For the full list of improvements, check out the release notes.
April 6, 2023:
JetBrains Academy’s New Projects and Topics: April Update
At JetBrains Academy, we believe that learning can be both educational and entertaining. Our latest projects let you build your own traffic light, create a hospital appointment booking system, and even a password hacker project – not coincidentally combining learning and fun.
This month we’ve released 10 new projects and 36 topics across a variety of programming areas, including Java, Python, Flask, frontend, and data science. Let’s take a closer look at what’s new in our project repository.
Java
🆕 Project: Traffic Light (Beta). Medium
Do you know how traffic lights work? In this project, you’ll have the opportunity to create a simplified version of your own traffic light and learn a variety of new skills in the process. By the end of the project, you’ll be able to work with multithreading, handle exceptions, inherit classes, and use the circular queue data structure.
🆕 Project: Hospital Appointment Booking System (Beta). Hard
In this project, you’ll learn how to build REST services with Spring Boot and work with databases, JSON, and REST API basics. Using your newfound skills, you’ll develop an appointment system based on a REST API that will improve the management of hospitals. Patients can easily schedule appointments, the head physician can monitor doctors’ workloads, and doctors can better plan their days.
🆕 Project: Password Hacker (Beta). Challenging
Get ready to enter the world of hacking with our Java project! As a hacker, your mission is to connect to a secret server without knowing the password. Through this project, you’ll learn about the key tools and techniques used in hacking, including iterators, generators, and the itertools module in Java. You’ll also develop a client app and connect to a server using the socket module, all while gaining a deeper understanding of JSON and the time module.
Additionally, the Meal Planner project has been released from Beta.
🆕 Topics:
-
Code organization: Thread-safe singleton
-
Spring Boot: Custom queries with @Query, Testing repositories
Python
🆕 Project: Jeopardy! Question Answering Bot (Beta). Challenging
Challenge yourself with our Jeopardy!-style question-answering project, where you’ll create a bot that can answer questions from various fields of knowledge. Can you outdo IBM Watson, which famously beat humans at this game in 2011? Learn how to use sentence-embedding algorithms to separate user questions, and gain insights into preparing a corpus for creating a Q&A system.
🆕 Project: Marathon Runners (Beta). Hard
Get introduced to machine learning by implementing one of the most popular algorithms – the k-nearest neighbors (KNN) algorithm. In this project, you’ll use basic Python tools to code the KNN algorithm from scratch and solve classification problems. You’ll learn about basic data types, practice using Python functions, and get an introduction to object-oriented programming. Additionally, you’ll learn how to prepare and normalize data before feeding it into a machine learning algorithm.
🆕 Project: Learning Progress Tracker (Beta). Hard
Build an education platform to manage registrations, track learning progress, and provide detailed information for users and categories. You’ll practice using loops, flow controls, functional decomposition, and SOLID principles. Learn how to process strings and leverage the unittest framework to ensure error-free code. Suitable collections such as lists will be used to sort and filter data.
Furthermore, we’ve released the projects Simple Text Summarization, Sorting Tool, and Video Game Database from Beta, with improved features and functionality for learners.
Flask
🆕 Project: Movie Database API (Beta). Challenging
Movie buffs will love this new project. Using a movie database, you’ll learn how to use SQLAlchemy to design and implement database table mappings, insert and retrieve data, and filter data by building SQL queries. You’ll also gain valuable experience in implementing data models and relations in a database schema. Grab some popcorn and let’s get started!
Additionally, the Memorization Tool has been released from Beta.
Frontend
🆕 Project: URL Shortener (Beta) Medium.
In this project, you will create a web page to shorten website URLs using HTML and JavaScript. You will also practice manipulating the Document Object Model (DOM) to take input from the user and display the results dynamically. This is a great opportunity to apply your HTML and JavaScript skills in a practical setting and gain hands-on experience with web development.
🆕 Project: Dog Glossary (Beta). Hard
Who doesn’t love seeing cute dog pictures online? Create your web page to display random dog pictures and a list of dog breeds using a public API. This project will help you practice handling APIs and improve your HTML and JavaScript skills. Through fetching data from an API and displaying it on the web page, you’ll learn how to work with promises and handle different data structures.
🆕 Topics:
-
JavaScript: Local Storage
-
Node.js: Working with filesystem, Creation of HTTP server, Querystring module, What is module?
Data science
🆕 Machine learning project: Naive Bayes Classifier with Pen and Paper (Beta). Easy
In this project, you’ll gain insight into the process of converting words into numerical data and discover the inner workings of the Naive Bayes classifier. Through working on a simple dataset, you’ll develop familiarity with solving classification problems. You’ll also learn about language identification – a crucial task in natural language processing – and discover how to create a basic classifier with only a pen and paper.
Additionally, the projects Generating Randomness and Linear Regression from Scratch are now out of Beta.
🆕 Topics:
-
Tools: K-Means in sklearn
-
Machine learning: Basics of neural network architecture, MAE, Introduction to Question Answering
-
NLP: Knowledge-based QA, Machine Reading Comprehension & Logical Reasoning QA, Open-domain and close-domain QA
This month we have also released a new Game Development with Unity track and updated Introduction to Natural Language Processing. Check them out if you missed them.
Kotlin
The Contacts project has been released from Beta.
🆕 Topics:
-
Ktor: WebSockets
-
Control flow: Inline functions and reified types in Kotlin
-
Object-oriented programming: Infix functions, Operator overloading
-
Types and data structures: CharSequence, Type cast and smart cast
Bash (Unix shell)
The Enigma project is now out of Beta.
Android
🆕 Topic: Parcel and Bundle
Fundamentals
🆕 Topics:
-
Algorithms and structures: Ford-Fulkerson algorithm, DFS-based topological sort, Coding: overview
-
Dev tools: Introduction to Kubernetes
-
JVM: Parallel GC
-
SQL and Databases: Sequences, The WITH statement, Aggregate operations, Explain, Import and export CSV files, Date and Time data types in SQLite
Note that projects marked as Beta are still in the early stages of testing. If you’re interested in checking out Beta projects on the platform, make sure the Beta-tester feature is enabled in your profile settings.
That’s it for this month! We hope that you will find these updates valuable and that they will enhance your learning experience. As always, we welcome your feedback and suggestions, so please don’t hesitate to get in touch with us at academy@jetbrains.com or share your thoughts with us on Twitter or Facebook.
May 4, 2023:
JetBrains Academy’s New Projects and Topics: May Update
As we head into summer, we’re excited to announce our May content update which includes nine new projects for Python, Kotlin, Java, Flask, Android, and Bash, ranging from easy to challenging, as well as 55 new topics. 9 projects that were previously in Beta have also now been fully released!
At JetBrains Academy, we are dedicated to providing learners’ with the best possible learning experience, and we are constantly improving our content based on learners feedback. We encourage you to share your thoughts, especially on Beta projects and topics, as this feedback helps us to make our interactive platform even better.
Now let’s dive into the updates in more detail.
Python
🆕 Project: My First Project (Beta). Easy
This project is great for beginners who are just starting to learn Python programming. You’ll learn some of the basics of Python syntax, including integer arithmetic, variables, and how to take user input. The goal of the project is to help you create a simple tool that will calculate your net income for the first month of running a small corner shop.
🆕 Project: Spell Checker (Beta). Challenging
It’s hard to imagine a time before spell checkers, as we now rely on them heavily to ensure our writing is error-free. This project is a simple introduction to the world of NLP. You’ll learn how to create a simple spell checker using Python, the Levenshtein distance algorithm, n-gram models, and the Natural Language Toolkit (NLTK) library.
🆕 Topics:
-
Control flow: Introduction to Functional Programming and Recursion in Functional Programming
-
Python libraries: Introduction to AstroPy
-
Django topics: Forms and Validation
Furthermore, we’ve released the projects Maze Runner, Jeopardy! Question Answering Bot, Learning Progress Tracker, HotKitchen, School of Wizards and Magic Wars and Duskers from Beta, with improved features and functionality for learners.
Kotlin
🆕 Project: File Server (Beta). Challenging
Do you ever worry about losing your precious data? Storing files on a server can help prevent that, as it provides a reliable backup and allows you to access your files from anywhere. In this project, you will learn how to create your own file server that can handle multiple client connections. You’ll gain experience working with sockets in Kotlin and improve your multithreading and serialization skills.
🆕 Project: JSON Database (Beta). Challenging
JSON is a versatile data format that’s widely used in web development to exchange data
between servers and clients. In this project, you will create a client-server application in Kotlin that allows clients to store their data on the server in JSON format. You’ll learn how to implement parallelization and handle multiple client requests simultaneously, improving the overall performance of your application.
🆕 Topics:
-
Concurrency and parallelism: Flows: error handling, dispatching
-
Object-oriented programming: Class delegation, hashCode and equals, Sealed class and interface
-
Ktor topics: Koin for Ktor, CORS
Additionally, the Maze Runner has been released from Beta.
Flask
🆕 Project: Recipe Builder API (Beta). Challenging
In this project, you will create a web service with Flask that allows you to store, retrieve, update, and delete recipes. With a pre-uploaded list of recipes to choose from, you’ll be able to find your next meal in seconds. Through this project, you’ll gain experience with Flask, JSON, and the SQLAlchemy SQL toolkit, making it a great opportunity for beginners to learn about backend development.
🆕 Project: Above the Rim API (Beta). Challenging
Create your own API from scratch and improve it with new functionalities to post basketball game results right after a match is over. By the end of the project, you’ll have a fully functional API that can add new teams and game results, making it easier than ever to stay up-to-date with the latest scores.
Java
🆕 Project: Last Pencil (Beta). Easy
Become the mastermind of the Last Pencil game and challenge your friends to a match. In this project, you will create a simple but engaging game where you can decide who wins. You’ll practice the basics of Java programming, from creating variables and methods to using loops and conditionals to build a fully functional game.
🆕 Topics:
-
Additional instruments: Setting up a server with HttpServer and Kryo
-
Spring Boot: Events and listeners, Intro to H2 database, Spring Security architecture
Android
🆕 Project: Simple Bank Manager (Beta). Challenging
Want to learn how to manage your bank account and pay bills on-the-go? In this project, you will create a simplified version of a banking app using Android Studio and Kotlin. You will gain a better understanding of how to use Kotlin in the development process while building your first banking application.
Bash
🆕 Project: File Janitor (Beta). Easy
Learn how to master the command line and automate your work with Bash scripts. In this project, you’ll explore the basics of Bash scripting, including functions, arguments, and conditional statements. You’ll also discover useful utilities and learn how to automate tasks with shell scripts. Whether you’re a beginner or a seasoned Linux user, this project will help you sharpen your skills and take advantage of the power of the command line.
Frontend
🆕 Topics:
-
HTML: Buttons
-
CSS: Grid rows and columns, Grid alignment: part 1, object-fit and object-position
-
JavaScript: Introduction in websocket, Deep Copying Objects, Map, Shallow Copying Objects
-
Node.js: ECMAScript modules, Sending requests, Introduction to the HTTP module, Intro to assert module, Intro to path module
Additionally, the projects Amazing Prices and Dog Glossary are now out of Beta.
Data Science
🆕 Topics:
-
Instruments: Additional feature scaling techniques in sklearn, Feature scaling in sklearn, Polynomial Regression in sklearn
-
Machine learning: Silhouette coefficient and Feature scaling
-
NLP: OCR Implementation, Reading text from image, Information Retrieval and Question Answering, SARI, Text clustering, Topic modeling
Fundamentals
🆕 Topics:
-
Essentials: Understanding JSON Web Tokens
-
JVM: Serial GC
-
SQL and Databases: CHECK constraint, CUBE, ROLLUP and GROUPING SETS, Data models, Array query operations, Importing and exporting data, SQLite dot commands
-
System administration and DevOps: Customizing the on directive, Braces and parentheses, Introduction to Docker compose
Scala
🆕 Topic: High-order functions
Mobile
🆕 Topic: Recomposition
Projects marked as Beta are still in the early stages of testing. If you’re interested in checking out Beta projects on the platform, make sure the Beta-tester feature is enabled in your profile settings.
That’s it for this month! We hope that you will find these updates valuable and that they will enhance your learning experience.
May 30, 2023:
TeamCity 2023.05: Dark Theme, Agent Terminal, and More
TeamCity 2023.05 introduces some of the most anticipated features, including the dark theme, terminal access to agents, and multi-node setup enhancements.
The integration with Let’s Encrypt and the two-factor authentication for custom groups are here to further strengthen TeamCity’s security features.
With this release, we’re also rolling out the GitHub App connection, the ability to send custom Slack messages right from a running build, and more.
Let’s take a closer look at what TeamCity 2023.05 has in store for you.
Dark theme
We realize how important it is for developers to feel comfortable with the tools that they use on a daily basis. That’s why we’re happy to release one of the most upvoted features in TeamCity – the dark theme.
The dark theme can provide a more comfortable and productive working environment. It reduces eye strain, helps improve your focus by eliminating visual distractions, and extends your device’s battery life. Last but not least, some users find it more visually appealing.
The dark theme in TeamCity is available both for the Classic and Sakura UIs. In addition to the “Light” and “Dark” options, you can also choose “System theme” to automatically apply a theme that fits your current OS settings.
To switch between the themes, head over to your profile settings and choose your preferred theme:
You can also easily switch between the themes via the “Theme” drop-down that’s available right in the header:
Have you started using the dark theme yet? Feel free to share your feedback in the YouTrack issue.
Agent terminal
TeamCity 2023.05 comes with a convenient way to open remote terminals to agent machines directly from the TeamCity UI. With the help of remote terminals, you can view agent logs, check installed software, and debug specific agent issues.
This functionality comes especially handy when you need to troubleshoot any issues on an agent. Thanks to remote terminals, you don’t have to worry about maintaining SSH keys for connecting to agents. Mac, Linux, and Windows (with PowerShell) are supported.
To open the terminal, head over to Agents in the TeamCity header, select an agent, and click Open terminal at the top of the agent page:
Multi-node setup enhancements
With this release, we’re implementing an improved requests distribution logic that efficiently distributes the load between main and secondary nodes.
By making nodes fully interchangeable, we’re improving TeamCity’s scalability. All TeamCity nodes can now participate in balancing out user requests, which means the workload produced by web UI users can be evenly distributed between all the nodes.
The new distribution logic provides a smoother and more reliable experience for all and helps to ensure that the impact on users is minimal in the event of planned maintenance or an unexpected failover.
Assign the VCS polling responsibility to multiple nodes
TeamCity users no longer have to rely on a single node to handle the “VCS repositories polling” responsibility. With v2023.05, this function can now be assigned to multiple nodes, resulting in a more balanced workload, faster detection of new commits, and faster starting of builds. As a result, you can build, test, and deploy with greater efficiency, reducing delays and enhancing overall productivity.
Security features
At TeamCity, security is our top priority. To further strengthen the product’s resistance to data breaches and potential business disruptions, we’re implementing the following features.
Integration with Let’s Encrypt
Starting from version 2023.05, TeamCity integrates with Let’s Encrypt, a free and automated certificate authority that provides digital certificates for enabling HTTPS on websites. TeamCity can contact this certificate authority to automatically issue and set up a valid certificate. The certificate will then be updated automatically, without any actions required from the user.
Read more about TeamCity’s integration with Let’s Encrypt in our documentation.
Two-factor authentication
Previously, the mandatory two-factor authentication mode used to affect the whole server. With this release, we’re making it possible to create custom user groups where the 2FA mode will be mandatory even if the global mode is set to “Optional”.
GitHub App connection
It’s now possible to authorize TeamCity to work with GitHub as a GitHub App. With this new feature, you can run various actions and use the GitHub API without having to create separate service accounts or act on behalf of a user.
To configure GitHub App as a connection, head over to Project Settings | Connections | + Add connection and select “GitHub App” from the dropdown menu.
After that, if you don’t already have a GitHub App, follow the TeamCity instructions to create and install a new App with the required permissions.
One of the biggest benefits of using the GitHub App connection is that instead of accessing GitHub under a user’s credentials, TeamCity will use non-personal, short-lived, refreshable tokens issued for a GitHub App installation in the user’s GitHub organization/account. This comes in handy when a user leaves the organization or their permissions change.
Additionally, you can subscribe to various hooks from GitHub without the necessity to install any additional plugins. The connection works right out of the box, making the integration between TeamCity and GitHub seamless.
Head over to the docs to read more about how to configure a GitHub App connection in TeamCity.
Improved support for draft pull requests in the Pull Requests plugin
Earlier, in TeamCity Cloud version 2022.12, we introduced the ability to configure the Pull Requests build feature to ignore GitHub draft pull requests.
Now, this functionality is available to all TeamCity users. In this release, you can opt to ignore GitHub draft pull requests using the Pull Requests build feature. To do so, simply select the “Ignore Drafts” option in the feature settings. Draft pull requests will be ignored by TeamCity until their status changes.
Normally, the Pull Requests build feature retrieves information for GitHub draft pull requests, and runs builds on them by default. When a draft pull request is being built, the build page shows the pull request number with the “Draft” status and icon next to it.
Customizable notifications
TeamCity already offers the ability to send email and Slack notifications when triggered by certain events. With the 2023.05 release, we’re extending this functionality with the ability to send Slack messages and email notifications via service messages.
With the latest update, TeamCity has added the ##teamcity[notification...] service message that enables users to send email notifications, Slack direct messages, and Slack channel updates. It’s now also possible to send notifications to multiple people at once.
These messages are secured by built-in safety measures to prevent them from being delivered to the wrong recipient and to block links to untrusted external resources.
One scenario in which this functionality can be helpful is when you want to send a notification when certain conditions are met, or something outstanding happens, for example, when an ongoing deployment reports an error that should be reviewed while the build is still running.
Add and remove build tags via service messages
In addition to sending custom notifications, you can also add and remove build tags with the help of service messages.
Tagging builds provides you with the ability to label and systemize builds by certain criteria. For instance, you can use build tags for tagging the reasons why builds fail and then quickly finding builds with the same failure reason.
Head over to the documentation to learn more about how to set up build tags. Or, if you have already started using the feature, feel free to share your feedback in this YouTrack issue.
Podman support
With the 2023.05 release, we’re introducing support for Podman, a container engine that allows users to manage containers without requiring root privileges. It is fully compatible with Docker commands, making it easier to switch between engines.
Over to you
For the full list of new features, please make sure to check out our What’s New section in the documentation.
June 1, 2023:
Monitor Your TeamCity Builds with Datadog CI Visibility
This article was originally written by Nicholas Thomson and Kassen Qian of Datadog and published on the Datadog blog.
As the complexity of modern software development lifecycles increases, it’s important to have a comprehensive monitoring solution for your continuous integration (CI) pipelines so that you can quickly pinpoint and triage issues, especially when you have a large number of pipelines running.
Datadog now offers deep, end-to-end visibility into your TeamCity builds with the new TeamCity integration for CI Pipeline Visibility, helping you identify bottlenecks in your CI system, track and address performance regressions, and proactively improve the efficiency of your CI system.
Making data-driven decisions to increase the performance and reliability of your pipelines will help you improve end-user experience by allowing your team to push code releases faster and with fewer errors.
In this post, we’ll show you how to:
-
Integrate TeamCity with CI Visibility
-
Investigate pipeline failures to fix erroneous builds
Integrate TeamCity with CI Visibility
To configure the TeamCity integration with Datadog CI Visibility, first download the Datadog CI plugin on the TeamCity server. Then, ensure that the last build of your build chains is a composite build. Build chains in TeamCity map to pipelines in Datadog, and individual builds map to pipeline executions.
Add the following parameters to your project:
-
datadog.ci.api.key: your Datadog API key
-
datadog.ci.site: datadoghq.com
-
datadog.ci.enabled: true
Once you’ve enabled the integration, data from your TeamCity pipelines will automatically flow into Datadog. If you navigate to the Pipelines page, you can see TeamCity pipelines alongside any other providers you may have instrumented with CI Visibility.
Investigate pipeline failures to fix erroneous builds
After you enable the TeamCity integration in CI Visibility, you can use the Pipeline overview page to get a high-level view of the health and performance of your TeamCity build chains, with key metrics such as executions, failure rate, build duration, and more.
Say you’re an engineer at an e-commerce company where one of the checkout services for your primary application is undergoing a major revamp under a tight deadline. After pushing new code, you notice that your builds are extremely slow—much slower than normal. You can go to the Pipelines page in CI Visibility to confirm if your particular pipeline is experiencing high build durations. Then, you can click on the build chain from the Pipeline overview page to investigate the pipeline in more detail.
At the top of this Pipeline Detail view, you can see the status of the last build, with a link to the build chain in TeamCity. Below that are timeseries widgets illustrating the total number of builds, the error rate, build duration, and other key metrics that can help you determine when the build chain began to experience errors. In this case, you see the error rate spiking repeatedly over the past several days.
The Job Summary gives you more granular information about your build chain, such as which specific jobs in this pipeline failed the most, which ones took the longest, and which jobs have experienced performance regressions compared to the previous week. Information like this can help you identify the areas in your CI system where optimization will result in the greatest performance gains.
To investigate further, you can scroll down to see the individual builds for this pipeline. If you click on an execution, you can see a flame graph view that visually breaks down the pipeline execution into the individual jobs that ran sequentially and in parallel.
The flame graph shows you each build’s respective duration broken down by job and, if the build was erroneous, the exact parts of the build that failed. This can help you pinpoint problematic jobs that may be at the root of a failed build.
The Info tab shows you repository and commit information along with other git metadata, so you can easily see the source of each build. To investigate further, you reach out to the team member who pushed the commit for this build and discover that the issue is caused by a typo. (We strongly recommend that customers use a TeamCity username style that contains author email, so that Datadog can automatically detect git author email addresses and correlate commit information to pipeline data.)
Once resolved, the build chain functions without error so you can build and test successfully, and release your updated checkout service to customers on time.
Understand and optimize TeamCity build chain performance
CI Visibility support for TeamCity is now generally available, giving you deep visibility into your build chains so you can troubleshoot failed builds, identify performance regressions faster, and increase your release velocity.
For more information, see the Datadog documentation and blog post on the TeamCity Agent integration.
June 23, 2023:
DataSpell 2023.1.3 is Out!
DataSpell 2023.1.3 brings you fixes for disappearing notebook cells, invisible DataFrame rows and cell focus bugs.
Download the new version from our website, directly from the IDE, via the free Toolbox App, or use snaps for Ubuntu.
Disappearing notebook cells
In DataSpell 2023.1, when pasting text into a new notebook cell added using Select Cell | Add Code Cell Below, the new cell disappears. This behavior is corrected in DataSpell 2023.1.3.
Invisible DataFrame rows
When a DataFrame is displayed in table form in DataSpell 2023.1, a horizontal scroll bar overlaps the last displayed row. In DataSpell 2023.1.3 the table no longer has to be manually adjusted to view the final row.
Cell focus bugs
DataSpell 2023.1 contained several cell focus bugs which we have corrected in DataSpell 2023.1.3.
When the user edited a code cell in a Jupyter notebook, selected text in this cell and then created a new cell of any type, the cursor moved to a new cell but focus erroneously remained in the code cell. When the user then typed in the new cell, the typed text would appear in the old cell. [DS-4978]
When text was selected in a cell and a new cell was then added using an action on the toolbar, pasted text incorrectly appeared in the first cell, instead of in the new cell. [DS-5048]
July 4, 2023:
JetBrains Academy’s New Projects and Topics: July Update
If you’re learning Python, JavaScript, Kotlin, or Go and you’re interested in adding unconventional projects to your developer portfolio, such as a traffic light, browser game, or account service, we’ve got you covered!
But that’s not all. We’re also introducing 66 new topics across programming languages, algorithms and data structures, system administration and DevOps, and computer science fundamentals. This will allow you to further expand your programming knowledge.
Now, let’s take a closer look at what’s new.
Python (data science, machine learning)
🆕 Python project: Traffic Light (Beta). Hard
In this project, not only will you create your own traffic light app, but you will also gain valuable skills in multi-threading, exception handling, class inheritance, and implementing the circular queue data structure.
🆕 Data science project: Random Forest from Scratch (Beta). Hard
Dive into the implementation of one of the most popular ensemble algorithms, Random Forest. You’ll have the opportunity to build the entire algorithm from scratch using numpy and test it on the titanic dataset from sklearn.
🆕 NLP project: HyperSearch Engine (Beta). Challenging
Build your very own search engine using the TF-IDF algorithm. Your program will be able to highlight the target word and provide context around it.
🆕 Django project: Regex Tester (Beta). Challenging
Harness the power of regular expressions by creating a tool for testing regexes. In this project, you’ll develop a simple regex tester that can store the history of tests, allowing you to tame the complexity of regular expressions.
🆕 Topics:
-
Django: Model data types
-
Flask: Flask Test client, Versioning API
-
Data science instruments: Crosstab in pandas, KNeighborsClassifier in scikit-learn
-
Machine learning: Preprocessing categorical features, Adaboost, Adaboost: an illustrated walk-through, Gradient boosting, Gradient boosting: the illustrated regression
-
NLP: Introduction to Hugging Face, Implementation of transformers in Hugging Face, Hugging Face Datasets, Transformers in NLP, Introduction to dialogue systems, Rule-based dialogue systems, BLEU, ROUGE, N-gram and collocation measures
Last month 5 Python projects got high scores for their usefulness, clarity, and fun from our users. These projects have now been released from Beta and are ready for you to explore:
-
Library Management System (Easy)
-
Algorithms with IMDB (Challenging)
-
HyperSchool (Challenging)
-
Opinion Detector (Challenging)
-
Spam Filter (Challenging)
Frontend (HTML, CSS, JavaScript)
🆕 Project: Site for Marathon (Beta). Easy
Discover the power of iframes in web development as you learn to seamlessly embed external content within your web pages. Explore the techniques of absolute positioning and z-index to precisely position elements on your page. Gain proficiency in working with images and adding subtle animations to enhance the dynamism of your web page.
🆕 Project: Who Wants to Be a Millionaire (Beta). Medium
Create a browser game while acquiring essential skills in web development. Dive into the world of browser events and learn to effectively handle them, enabling seamless interactivity within your game. Work with JSON objects, allowing you to efficiently store and manipulate game data, and develop your game logic using JavaScript.
🆕 Topics:
-
HTML: Tag embed
-
CSS: Filters, Media queries, Responsive images and videos, Responsive tables, Viewport
-
JavaScript: Self-invoking functions and closures, Server-sent events, Objects prototyping
We’ve also released the Postprocessor project from Beta, with improved content and functionality.
Kotlin
🆕 Project: Bulls and Cows (Beta). Medium
Challenge yourself by creating an advanced version of the classic code-breaking game “Bulls and Cows”. Begin by recreating the original version of the game and then elevate it to new heights with your innovative additions and enhancements.
🆕 Spring Boot project: Account Service (Beta). Challenging
Master the Spring Security module. Gain a solid understanding of user authentication and authorization, allowing you to ensure the utmost security for your applications. Learn how to register security events and familiarize yourself with the latest information security standards for web applications, ensuring your projects meet modern requirements.
🆕 Topics:
-
Kotlin: Retrofit, Advanced lambda expressions, Type-safe builders, StringBuffer
-
Android: System apps and common intents, Crashlytics, Menus: Options, Popup
-
Ktor: DefaultHeaders, Request Validation
-
Koin: Koin Annotations
The Blockchain and Cinema Room Manager have also been released from Beta.
Go
🆕 Project: File Type Analyzer (Beta). Challenging
Files come in a variety of formats, often indicated by their names. Even if the file type has been manually changed or removed, information about the type is still embedded within the file. In this project, you’ll build a tool that extracts information from files to determine their type. Experiment with various algorithms and observe how different algorithms impact the tool’s speed.
🆕 Topics: Synchronization with channels, Context cancellation and timeouts
Java
🆕 Topics: Hashing java.security.MessageDigest, Understand the problem, External resources
Algorithms and structures
🆕 Topics: Dynamic programming: another approach, Cryptographic hash functions, Edit distance, Caesar cipher, Vigenère cipher
System administration and DevOps
🆕 Topics:
-
Command line: How to parse JSON with jq, Sorting and transforming JSON with jq
-
Docker: Docker-compose.yml syntax
-
Kubernetes: Tools for Local Kubernetes Deployment, What is a pod?
Scala
🆕 Topic: Unified types
Fundamentals
🆕 Topics:
-
Essentials: Best practices for writing code, 12-factor application: configuration, process and execution
-
SQL and databases: Explain, Explain Analyze, Leveraging Built-in SQL Functions and Features, Writing efficient SQL queries
That wraps up this month’s offerings! We hope you’ll enjoy exploring these exciting projects and topics to enhance your programming skills.
Note that projects marked as Beta are still in the early stages of testing. If you’re interested in checking out Beta projects on the platform, make sure the Beta-tester feature is enabled in your profile settings.
If you have any questions or if you would like to share your feedback, feel free to leave a comment below, contact us at academy@jetbrains.com, or share your thoughts with us on Twitter or Facebook.
Enjoy learning!
July 6, 2023:
Space On-Premises 2023.2 Is Out!
Do you strive for complete control over your data while developing software?
You’ll be glad to know we’ve just released Space On-Premises 2023.2, a more accessible version with new simplified installation options and other useful features.
With the new AWS one-click installation option, you can now quickly and easily run Space on the AWS cloud. You can also use Docker Compose as a stable installation with the expanded Docker Compose configuration steps that we’ve added in this version.
To help improve your productivity, Space On-Premises 2023.2 adds a number of new features, such as powerful IDE-inspired navigation, issue time tracking, the ability to store build artifacts and cache project dependencies, support for Rust packages, the quick option to create issues directly from code snippets, and more.
Read this article to learn what’s new in the 2023.2 version, and see an overview of the available installation options to find one that suits your team best.
July 12, 2023:
IntelliJ IDEA 2023.1.4 is Here!
We’ve just released IntelliJ IDEA 2023.1.4 with several valuable fixes.
You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our website.
Here are the most notable fixes included in v2023.1.4:
-
We fixed the issue with missing custom code style settings and they are now correctly preserved by the IDE. [IDEA-318457]
-
The Copy Reference action for files in non-java modules works as expected and copies the path from the content root. [IDEA-316752]
-
The @jakarta.validation.constraints.NotNull annotation is now interpreted correctly during nullability inspections. [IDEA-323547]
-
Starting up the IDE no longer fails with the “CannotActivateException: Address already in use: bind” error. [IDEA-323836]
-
The IDE now has full Wildfly 28 support. [IDEA-320285]
To find out more information about the issues resolved, please refer to the release notes.
August 16, 2023:
Increase Your Productivity With TeamCity Documentation Examples for the Kotlin DSL
TeamCity offers the ability to define project settings and configure CI/CD pipelines programmatically with the help of the Kotlin DSL.
To help you take advantage of the Kotlin DSL’s capabilities and simplify the build configuration process, we’ve created extensive Kotlin DSL documentation. It comes with examples that you can simply copy-paste directly into your code base.
How the Kotlin DSL documentation works
Every TeamCity server has its own Kotlin DSL documentation, which is automatically curated to match the TeamCity version and any plugins installed on the server. If you install a new plugin, the documentation compiles again, providing you with relevant examples.
You can also refer to the general Kotlin DSL documentation, which is available in the TeamCity docs.
Accessing the Kotlin DSL documentation from IntelliJ IDEA
The Kotlin DSL documentation is available right from IntelliJ IDEA (both Ultimate and Community editions). You can access it by going to Maven Tool Window | Download Sources and Documentation.
Another way to access the Kotlin DSL documentation directly from your IDE is to run the mvn -U dependency:sources command.
The documentation’s context and examples change when you click on an entity (for example, a build step or a trigger). The information is displayed either in a popup window or in the panel on the left, depending on the settings you’ve selected.
There are a few different ways to open the Kotlin DSL examples from your IDE:
-
Pressing F1 on Mac or Ctrl + Q on Windows. Refer to this section of the IntelliJ IDEA documentation for more details.
-
Clicking on the name of an entity (such as a build step or a command). The examples will open in the menu on the right-hand side of the window.
-
Simply hovering over an entity to access the in-line information window.
How this feature is helpful
Using Kotlin DSL examples can save you time when configuring your pipelines as code. The examples also make it easier to discover all of the things you can do when configuring builds, in addition to helping you identify the scenarios that TeamCity can support.
Working with the Kotlin DSL examples can be a particularly great option when you are just getting started, as they provide a solid foundation on which to build your understanding of the Kotlin DSL.
TeamCity also provides you with an option to view your settings as code with the help of the View as code button, which is available on the build level. This displays your settings as code that you can copy and paste to your codebase.
If your project can’t be configured via the UI and you’d still like to experiment with the View as code feature, consider setting up a sandbox project on your TeamCity server. It will give you a chance to play around with different TeamCity features and see how they look in the Kotlin DSL.
Further resources
If you’d like to learn more about using the Kotlin DSL for TeamCity, here are some additional resources that you might find useful:
-
Video series “Kotlin DSL: From Zero to Hero”
-
Blog post “Kotlin DSL for Beginners: Recommended Refactorings”
-
Blog post “Creating TeamCity Project Templates with Kotlin DSL Context Parameters”
-
Blog post series “Configuration as Code”
Over to you
Do you have any questions or comments about how we can improve the Kotlin DSL examples and documentation? We’d love to get your feedback! Feel free to share it in the comment section below.
Happy building!
August 24, 2023:
How To Choose a CI/CD Tool: A Framework
There are plenty of options available when it comes to selecting a CI/CD tool for your organization. A direct feature comparison on third-party websites like G2 can help you get a solid understanding of a tool’s core functionality.
However, you might still find it challenging to understand whether a tool is capable of meeting your specific requirements, how easy it is to use, or how compliant it is with your industry regulations.
In this blog post, we offer general guidelines for selecting an appropriate CI/CD solution and delve into how TeamCity fits into this framework. We hope it will help you make an informed decision when choosing the best tool for your organization.
Choosing the right CI/CD tool for your needs and goals
The needs for a CI/CD solution can vary greatly between teams, and a tool that serves one team perfectly might not be as suitable for another.
Here, we suggest seven main factors to consider when choosing a CI/CD solution for your team.
-
Development workflow. The solution should integrate smoothly into your development workflows without requiring you to write too many custom scripts or plugins.
-
-
Pipeline configuration. The tool should offer a flexible setup for environments, security checks, approvals, and more to allow the proper flow of artifacts and dependencies between build steps.
-
-
Feedback and analysis. The CI/CD solution should provide comprehensive feedback on multiple levels, from error messages to infrastructure performance, to ensure fast problem resolution and an uninterrupted delivery process.
-
-
Scalability and maintenance. Moving from one tool to another can take months of work, which makes it very important to use a solution that will cover all of your future needs from the outset.
-
-
Security. It’s critical to prevent malicious actors from stealing your source code, hacking into your infrastructure, or compromising the end product.
-
-
Cost efficiency. When evaluating a CI/CD solution, it’s not only crucial to look at the price of a license or a subscription but also the operational and maintenance expenses.
-
-
Usability and support. Every developer, even without prior experience in continuous delivery, should be able to understand how their project is built and deployed, and how to effectively use the tool to deliver changes faster.
-
-
Hosting model. Depending on your company’s needs, you might consider using a cloud or self-hosted solution. Both options have their advantages, so the final choice entirely depends on your specific needs.
All modern solutions offer essential features, such as Docker support, configuration as code, or automatic building of pull requests. For smaller projects, the differences between these solutions may not be as significant.
However, as your team grows and your workflows become more complex, it becomes increasingly difficult to set up the pipelines correctly and ensure they function as intended. In such cases, your experience with different CI/CD tools may vary greatly.
💡See also: Best Continuous Integration Tools for 2023 ‒ Survey Results
Source: Developer Ecosystem Report 2022
Development workflow
When evaluating a continuous integration tool, it is important to understand to what extent the tool can be customized to your workflow, and to what extent your team will need to adjust its processes to the tool. Consider the following aspects:
Diversity of your change workflows
Your team may require the ability to build every pull request, run the pipeline when someone commits to a specific branch, or trigger a build when a particular user changes files within a particular directory.
Sometimes, you may need to run the build pipeline without committing changes to the repository to ensure that you never commit broken code and avoid negatively affecting your team members’ efforts.
💡See also: Pre-Tested Commit: No broken code in your version control
Your code may be distributed across multiple version control systems (VCSs) of different types or live in a monorepo. You may need to rebuild and redeploy the application whenever an external dependency, such as a Maven package or a Docker container, is updated.
By carefully evaluating a CI/CD tool’s support for your specific change workflows, you can ensure that the tool is a good fit for your team and minimize the need for changes in your own processes.
Docker and non-Docker workflows
While Docker can provide a convenient and efficient approach to building many types of applications, there are situations where running on an actual OS is necessary. For instance, if your application relies on integration with a hardware component that cannot be accessed from a Docker container, you may require an OS-based workflow.
Similarly, a Docker-based workflow may be insufficient for your team’s needs if your software requires interaction with an OS, such as when developing a system driver or a Windows service.
When choosing the best CI tool for your team, evaluate your specific project requirements and consider the advantages and limitations of both approaches.
Team maturity
Teams just beginning their journey with continuous integration may be more flexible in adapting their workflow to fit a particular solution. Thus, tools with fewer configurable options may provide a simpler and more streamlined user experience.
In contrast, highly skilled teams that precisely understand their needs may find all-inclusive DevOps platforms limiting, as these solutions might not offer the required level of flexibility and customization.
Ease of migration
When selecting a new CI/CD tool, ease of migration should be one of the key considerations. In many cases, it may be simpler to migrate to a standalone solution rather than to a complete DevOps platform. This way, users can migrate in batches, you’ll have to write fewer manual integrations, and it will minimize disruption to your development workflows.
Organizational aspects
It’s vital to consider the culture and policies of your organization, particularly if teams are encouraged to select their own development tools.
Keep in mind that some team members may resist changes to their workflow, especially if they are comfortable and familiar with their current tools.
Development workflow support in TeamCity
TeamCity is an excellent fit for the following workflows:
-
Support for multiple VCSs.
-
Ability to run CI/CD processes without committing.
-
Granular control of changes (filtering by branches, usernames, file masks, etc.).
-
Trigger-defined parameters.
-
Comprehensive API to integrate with other tools.
While it may be tricky to choose between the streamlined experience of a platform and the flexibility of a standalone tool, the good news is that one doesn’t necessarily prevent you from using the other.
Since it’s common for teams to use multiple CI/CD tools concurrently, you might as well use a combination of a standalone solution and an all-inclusive DevOps platform as long as there’s proper integration between the two.
Pipeline configuration
Every team has its own unique workflow and requirements, which makes using a customizable solution that fully meets your needs vital. Here are the different types of pipeline configuration that you might consider when choosing a CI/CD tool.
UI and code-based configuration
Some tools offer a UI-based configuration approach that provides an easy way to get started and maintain the setup, as the pipelines can be configured without any special knowledge.
All modern tools support configuration as code, which gives you a versioned configuration history.
Many tools use YAML configurations, which provide a very straightforward way to automate the building and testing of simple apps. However, managing YAML files can become increasingly difficult as the team and infrastructure become more complex.
For large-scale projects, it might be more effective to configure CI/CD using a fully-fledged programming language, which allows using loops, conditional statements, and other language constructs. In addition, it makes it easy to write the configuration code in an IDE and take advantage of its refactoring and debugging features.
Workflow customization
Customization is a critical aspect of selecting continuous integration and continuous delivery software, as it allows teams to create pipelines that match their specific build and deployment workflows.
Depending on the trigger event, such as a code commit, a dependency update, or a scheduled trigger, teams may want to customize the build environment, scope of testing, Docker image tag, and other pipeline components.
If you need to execute specific steps sequentially on the same build agent (for example, you might want to start a Windows service and then run a build on the same system), the chosen tool should provide the ability to set this up exactly as needed.
Environment configuration
When selecting a CI/CD tool, it is essential to consider the level of customization it provides in terms of environment configuration. Specifically, teams should be able to choose the build environment that best fits their requirements, whether using Docker containers, cloud build agents, bare metal servers, or hybrid options.
💡See also: TeamCity’s Build Infrastructure Features
Pipeline optimization
As discussed in the Scalability section above, there are various optimization techniques that can help teams to complete builds faster and shorten the feedback loop.
One key optimization technique is the ability to cache dependencies, which can help minimize build times by avoiding having to download and install dependencies every time a build is run. Additionally, the ability to reuse build artifacts can further reduce build times, as previously-built components can be reused in subsequent builds.
Parallelizing tests across multiple build agents is another effective way to optimize pipelines in large projects. By spreading tests across multiple build agents, teams can reduce the time required to run all tests, helping to shorten the feedback loop and ensure that issues are identified and addressed more quickly.
💡Parallel tests revolutionized how we develop and test TeamCity. Our own integration tests have become over 10x faster, dropping from four hours to about 20 minutes.
Artifact management
Producing and propagating artifacts is essential to any CI/CD pipeline. Artifacts allow your builds to “communicate” and pass the data from one build to another.
By choosing a tool that can store artifacts, you can store the data produced by your builds for further analysis and debugging.
Feedback and analysis
The primary purpose of CI/CD is to shorten the time it takes to receive feedback on the changes you make to your software. The most actionable feedback is the one that is directly tied to specific code changes and provides information about the status of builds and deployments, as well as changes in performance and quality metrics.
When evaluating a CI/CD solution, the following aspects must be considered:
Analysis of build results
CI/CD solutions should provide a detailed analysis of build results, including information on failed tests, build times, error logs, and other key metrics. This information should be easily accessible and presented in a way that allows developers to identify and address issues quickly.
Trends
It is important for tools to provide trend analysis capabilities, allowing teams to track changes in build and deployment performance over time. This can help teams to identify patterns and trends and proactively address potential issues before they become more serious.
Performance monitoring
To identify bottlenecks and resolve issues that affect the efficiency of the CI/CD process, it is critical to be able to profile the performance of build agents and identify the need to provision more resources to the build infrastructure.
Performance monitoring in TeamCity
VCS and issue tracker integration
By integrating with the version control system and the issue tracker, a CI/CD tool opens more ways to provide feedback.
Flaky test detection
It’s important for a continuous integration tool to be able to analyze and detect flaky tests. To shorten the feedback loop and speed up your development process, look for a tool that can identify flaky tests for you and highlight them in the test results.
Scalability and maintenance
Software projects tend to grow in size and complexity. A reliable CI/CD system must be able to handle this growth and keep pace with the growing number of pipelines, builds, users, roles, and workflows.
To ensure that your team is never held back, the system should be able to efficiently manage resources and be equipped with monitoring and maintenance tools to resolve any issues that arise quickly.
The following factors will help you understand the level of scalability required for your team.
User management
In small-scale projects, it’s usually sufficient to have basic role-based access rules that define who can trigger builds, view build results, or modify the pipeline configuration. Large teams require more advanced features, such as LDAP integration or single sign-on (SSO) support, two-factor authentication, project hierarchy, granular permission management, approval workflows, and audits.
💡See also: TeamCity’s User Management Features
Pipeline optimizations
As the frequency of commits and the complexity of workflows increases, it becomes important to utilize the resources of the CI/CD efficiently. This can be done by reusing build artifacts and minimizing the number of unnecessary rebuilds, reordering build queues, parallelizing tests, and via other similar features.
Project templates
The larger your organization is, the more you will benefit from using project templates. By standardizing typical workflows, you can significantly reduce the effort required to create and maintain pipelines, improve collaboration between teams, prevent misconfigurations, and increase the security of your CI/CD pipelines.
In this case study, Gearbox, an award-winning game development company, shares how they were able to streamline their CI/CD processes and standardize their CI/CD practices with the help of TeamCity’s reusable project templates.
Performance and fault tolerance
As the number of projects grows and the demand for computing resources increases, it becomes more challenging to scale the build infrastructure and mitigate the risks of potential downtimes.
Typical requirements of large companies include automated provisioning of build agents (such as by integrating with cloud platforms) and the ability to organize build agents in pools for easier management.
Enterprise-level solutions pay a lot of attention to high-availability features, such as the ability to run multiple application servers in a clustered environment and smart load balancing.
Maintenance and upgrade
To identify and resolve issues in the CI/CD setup, administrators should have the monitoring and logging tools and be able to increase resources, implement caching mechanisms, or update artifact retention policies when needed.
Special attention should be given to upgrading the solution. Some tools rely on external plugins so heavily that upgrading them without breaking existing functionality may be difficult or even impossible.
A scalable CI/CD solution may not be crucial for small teams and projects with limited complexity. However, as the size of the team and the complexity of the project increase, it becomes one of the most critical aspects of the software development process.
How TeamCity supports scalability
TeamCity can support projects of any size, including projects with a vast amount of dependencies. It can scale automatically during periods of high load. One instance of TeamCity Server can stably work with 1,000+ build agents.
💡Read more: Solving Build Server Scalability Issues
Security features
Security is a major consideration for any software development process, and it is especially critical for CI/CD, as CI/CD tools are given trusted access to sensitive data and systems.
When evaluating a solution, look at the security features from two main perspectives:
-
Security of the service. With new threats and vulnerabilities emerging every day, the solution must ensure that potential attackers can’t get access to your source code, secret keys, build infrastructure, or build results.
-
Security of the end product. Many CI/CD tools allow integrating security checks into the build pipelines to ensure that the resulting software doesn’t have vulnerabilities that can be exploited.
Some teams tend to prioritize speed and efficiency over security, which can lead to shortcuts and neglect of security best practices. Integrated platforms generally provide an easier way to secure CI/CD at the cost of “vendor-locking” you into their ecosystem and workflows.
💡Check out our whitepaper “9 Ways To Prevent a Supply Chain Attack on Your CI/CD Server” for additional security tips.
Cost efficiency
As pipelines become more complex and team sizes grow, the price of a license or subscription can become less important compared to other factors that can affect the effectiveness of the CI/CD system:
-
Statistically, by reordering the build queue and minimizing redundant builds, teams can save at least 30% of the build time and associated costs.
-
The more tools and services your CI/CD supports out of the box, the less the chance you’ll have to write and maintain custom scripts and external integrations. This can drastically affect maintenance costs.
-
Additionally, most teams have peak periods (usually during release times) when any failures of the continuous integration tool can significantly impact the company’s business. This is one of the challenges that can hardly be evaluated without having actual experience with a particular CI/CD solution. Still, it is possible to understand how it handles such issues by reading reviews and feedback from other teams regarding work on similar tasks.
Ultimately, the total cost of ownership of a CI/CD solution depends on your team’s specific needs and requirements. As a general rule, it is prudent to consider the following factors:
Integration costs
Integrating CI/CD with version control systems, issue trackers, build and test frameworks, deployment automation systems, and other tools can be very time-consuming and expensive.
Maintenance costs
Every CI/CD solution requires allocating resources for running regular security audits and keeping the underlying infrastructure up to date, diagnosing and eliminating bottlenecks. In many companies, supporting these processes requires an entire team.
CI/CD efficiency
If your builds are constantly sitting in the queue and you are not getting rapid feedback, this defeats the whole purpose of a CI/CD solution. Such features as dynamic scaling in the cloud, re-using of builds, and test parallelization significantly impact developer efficiency in large companies.
Feedback
To achieve efficient and productive software development, it is essential to have a feedback loop that is not only timely but also actionable. When a build fails, developers should quickly identify the root cause of the issue and see a clear path to a resolution. Often, there is an observable time between being notified of a build failure and fully understanding what needs to be fixed – and this is where a reliable tool can provide immense value.
By analyzing build logs and providing precise information about the issue, the best CI/CD tools can help developers fix any issues quickly and confidently, leading to faster feedback loops and increased overall productivity.
Factors that reduce TeamCity’s cost of ownership:
-
Licensing costs
-
Infrastructure costs
-
Integration costs
-
Maintenance costs
Usability and support
Finding the optimal balance between functionality and user experience is a constant challenge for vendors of CI/CD solutions. When evaluating software usability for your team, you should consider the following factors:
UI consistency
As the size of projects increases, it becomes increasingly essential that your CI/CD provides the required functionality without adding unnecessary complexity. When evaluating a solution, ensure that the most critical features are provided by the vendor, not developed by the community.
An intuitive user interface is vital in a CI/CD solution because it helps developers easily and quickly understand and use the solution, even when working with complex processes.
Example of TeamCity’s UI
External plugins can often introduce navigation issues, feature an unresponsive interface, have conflicting terms and icons, exhibit difficulty adapting to different screen sizes and devices, and lack proper documentation. Regardless of how experienced your team is, an inconsistent user interface will always result in reduced productivity.
“One of the competitors had a very unfriendly UI. The feeling that people should have when they come into a CI/CD system is that it is very sturdy; it won’t break when I try to do anything in it. I think TeamCity has a very well-polished UI. You have confidence that it is a well-working system when you navigate it.”
– Steve Fortier, Lead Release Engineer, Gearbox
Accessibility
If a CI/CD system supports accessibility features such as screen reader compatibility, keyboard navigation, and high contrast mode, it’s usually a good indicator that it provides a good experience in general.
Documentation and support
Comprehensive documentation, tutorials, videos, and a supportive community can be essential for effectively using a CI/CD tool. As a rule of thumb, the longer the solution has been available on the market, the higher the chance that you will be able to resolve problems and obtain answers to your questions.
API
Depending on the specific requirements of your team and the workflow you want to implement, you may need to integrate your CI/CD with external tools. This experience can vary widely depending on the maturity of the API, the availability and quality of its documentation, and how rapidly it changes between versions of the software.
Hosting model
CI/CD solutions can be roughly divided into two categories – cloud and on-premises options.
The cloud option takes the burden of maintaining and scaling the CI/CD processes off your team’s shoulders and allows you to build the pipeline in the cloud.
Meanwhile, on-premises solution will enable you to host your CI/CD behind the security of your firewall, complying with the strictest security regulations and requirements.
Final thoughts
Choosing a CI/CD tool for your organization depends on many factors. In this blog post, we’ve provided you with the key factors you might want to consider when researching the best fit for your team or organization.
Feel free to share your questions or comments in the section below. We’ll be happy to answer them.
Happy building!
September 6, 2023:
JetBrains Academy’s New Projects and Topics: September Update
September is a month of change and excitement, and we’re here to make it even more inviting with our latest updates. Our team has prepared four new Python projects and more than 90 new educational topics.
Let’s look at these updates in more detail.
Python
🆕 Project: Rhythm Store (Beta). Medium.
In this project, you will learn the basics of SQL, testing your skills with complex queries using an e-commerce database: tracking orders, products, employees, and other vital data. If you love to deal with complex databases, this project is for you.
🆕 Project: Text-Based Adventure Game (Beta). Hard.
Explore the history of gaming!
Back in the day, video games – like Colossal Cave Adventure – were mostly text-based adventures with no fancy graphics. In this project, you’ll get to make a text-based game with your own story, learning how to utilize “if” statements, array lists, dictionaries, and loops. You will also learn the basics of file handling.
🆕 Project: House Classification (Beta). Hard.
Welcome to our Amsterdam real estate challenge, in which you’ll predict house prices using machine learning with loads of categorical data. Learn how to use different data encoders and dive into master data manipulation and decision tree algorithms, the key to unlocking the secrets of Amsterdam’s housing market!
🆕 Project: Bike Shop. Challenging.
You’ll create a web application for a bike shop that allows customers to customize their bikes and checks whether the necessary parts are in stock. In this project, you will learn about general Django concepts and master Django ORM (object-relational mapping). As a result, you’ll create an application with separate pages for each object in a database – bikes, in this case. Ready for a ride? Let’s go!
🆕 Topics:
-
Python: Key concepts of asyncio
-
Data science instruments: Introduction to Airflow, Preprocessing categorical features with pandas, Data types in pandas, Introduction to PyTorch, Naive Bayes with scikit-learn, Agglomerative clustering in scikit-learn
-
Machine learning: Agglomerative clustering
-
NLP: BERT Transformer, Introduction to machine translation, Text classification, Contextualized embeddings
Furthermore, we’ve released the Random Forest from Scratch, Databases for Sales, and Nobel Laureates projects from Beta with improved features and functionality for learners.
Kotlin
🆕 Topics:
-
Additional instruments: Introduction to kotlinx-cli, Libraries overview, Cloud Firestore, Firebase authentication, Firebase Realtime Database, Firebase storage, SQLDelight, SQLDelight: advanced use, Working with JDBC
-
Advanced features: Contracts, Require, check, and assert
-
Android: Spans, Themes and styles
-
Ktor: Intercepting routes, Ktor Client: first view, Custom plugins
-
Object-oriented programming: Building your own delegate
Additionally, the JSON Database project was released from Beta.
C++
🆕 Topics: For loop statement, If/else conditional statement, Jump statements, Switch conditional statement, While loop statement, Functions, Overloaded functions, Parameters and arguments in functions, Return in functions, Arithmetic operators, Comparison operators, Increment and decrement operators, Logical operators, Operator precedence and associativity rules
Java
🆕 Topics: Greedy algorithms, Convert text input, Introduction to HashSet
Go
🆕 Topic: CRUD operations – update
Frontend
🆕 Topics:
-
Vue.js: Installation, What is Vue 3?, v-for, v-model, Data and methods
-
TypeScript: Boolean, number, string, null, undefined and literal types, Compiling TypeScript, Variables and type annotations
-
JavaScript: IndexedDB, Canvas: pixel manipulation, Canvas: working with images
Additionally, the URL Shortener project was released from Beta.
System administration and DevOps
🆕 Topics: Expressions, Multiple stage building, Running a pod with a simple application, Utilization of resources in a pod
Math
🆕 Topic: Probabilities as frequencies
Projects marked as Beta are still in the early stages of testing. If you’re interested in checking out Beta projects on the platform, make sure the Beta-tester feature is enabled in your profile settings.
That’s it for this month!
We hope that you find these updates valuable and that they will enhance your learning experience. As always, we welcome your feedback and suggestions, so please don’t hesitate to get in touch with us at academy@jetbrains.com, or share your thoughts with us on Twitter or Facebook.
Happy learning!
September 18, 2023:
Introducing the Space integration for Jira Cloud
We believe that well-organized processes are crucial for building software efficiently. With this in mind, we're taking an issue-centric approach to software development that seamlessly integrates coding into the pipeline, boosting developer productivity and reducing friction.
As an extensible platform, Space aims to provide a similar issue tracking experience for both external issue trackers and Space issues. Today, we're happy to take the first step and introduce the Space integration for Jira Cloud, which allows you to:
-
Preview Jira issues in Space
-
Create Jira issues from Space
-
Automatically link Jira issues to commits and merge requests
For more information and to install the integration, head over to this page
October 13, 2023:
updates and improvements to YouTrack
Knowledge Base Updates
This release includes a handful of features designed to make your knowledge base experience even better.
Feature
Description
With inline comments, you can now annotate specific parts of text from articles in the knowledge base. This lets you express your thoughts and ask questions related to the highlighted content. You can also use this feature to start and resolve threaded discussions directly in an article.
A new option lets you export articles as PDF files, which means you can share content from your knowledge base anywhere you like, online or off.
Starting from the 2023.2 release, you can track how many people are viewing and linking to your content.
Helpdesk Improvements
Following the initial release of helpdesk projects in YouTrack 2023.1, we listened to your feedback and added some valuable new features to enhance your support experience.
Feature
Description
Tickets in helpdesk projects now include the option to add reporters and other users as CCs. This means you can keep all concerned parties up to date on every response and interaction.
Creating Tickets for Other Users
Helpdesk agents can now create tickets on behalf of any other user in the system. New search queries have been added to help agents and reporters find these tickets.
Other Enhancements
Feature
Description
Zero Inbox for the Notification Center
You now have the ability to mark reactions and mentions as read, which means you can see an empty feed when you have read all your notifications.
Updated Workspace Settings for Lite UI
The workspace preferences that let you customize the positions of the panels for custom fields and links in YouTrack Classic are now available in YouTrack Lite as well.
Smart Suggestions for Search Queries
We've improved the logic behind the auto-completion for search queries to de-prioritize suggestions that are not likely to return matches. This means you should always see suggestions that are relevant to your current context as you refine your search criteria.
Invitations for New Users from Project Settings
YouTrack now sends invitations to new users who are added to a project team using their email address. This helps you create accounts for new teammates directly in the project settings.
We've updated the built-in authentication module for Okta to let you sync group memberships and custom attributes on a set schedule.
New Options for Opening the Command Dialog
A new option in the Apply Command dialog in YouTrack Lite lets you choose whether to open the dialog using a standard keyboard shortcut or by pressing any key. This means you can limit this action so you don't trigger it accidentally.
Thanks to contributions from our community translation project, you can now start using YouTrack in Turkish.
This new language option is available at the global level or as a per-user preference.
Discontinued Features
Feature
Description
Custom Shortcut Schemes
We have removed support for custom keyboard shortcut schemes. This means that administrators can only select the default shortcut scheme or the alternative scheme for Slavic-language keyboards.
Jabber Notifications
Given the ongoing decline in popularity compared to other messaging platforms, we have decided to discontinue support for notifications over Jabber (XMPP).
Starting from YouTrack 2023.2, we no longer distribute the application as a Windows Installer package. System administrators will need to use another distribution to upgrade an existing MSI installation. We recommend that you upgrade your installation using our Docker Container.
Integration with Upsource
As JetBrains has discontinued technical support for Upsource, we have also dropped support for integrations between Upsource and YouTrack.