# Exercise

Published articles for Exercise.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Coding Challenge #124 - Du

DevFeed: [Coding Challenge #124 - Du](<https://devfeed.tech/articles/coding-challenge-124-du-29200.md>)

Original publisher: [Read original article](<https://codingchallenges.substack.com/p/coding-challenge-124-du>)

Author: John Crickett

Published: 2026-06-13T08:01:14Z

Content type: tutorial

Language: en

Sources: [Coding Challenges](<https://devfeed.tech/sources/coding-challenges.md>)

Topics: [Code Challenge](<https://devfeed.tech/topics/code-challenge.md>), [POSIX](<https://devfeed.tech/topics/posix.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [Utility Software](<https://devfeed.tech/topics/utility.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [coding](<https://devfeed.tech/tags/coding.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [filesystem](<https://devfeed.tech/tags/filesystem.md>), [posix](<https://devfeed.tech/tags/posix.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [run](<https://devfeed.tech/tags/run.md>), [unix](<https://devfeed.tech/tags/unix.md>), [utilities](<https://devfeed.tech/tags/utilities.md>)

### AI overview

A coding challenge asks readers to build their own POSIX-compatible du utility. It covers recursively traversing directories, calculating disk usage, handling hard links and symbolic links, and presenting results in multiple formats.

### Source excerpt

This challenge is to build your own du.

## Improving the prompt to the AI to get better code

DevFeed: [Improving the prompt to the AI to get better code](<https://devfeed.tech/articles/improving-the-prompt-to-the-ai-to-get-better-code-30758.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2025/07/improving-prompt-to-ai-to-get-better.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2025-07-17T15:56:00Z

Content type: opinion

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Code](<https://devfeed.tech/topics/code.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Latency](<https://devfeed.tech/topics/latency.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [change](<https://devfeed.tech/tags/change.md>), [code](<https://devfeed.tech/tags/code.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [latency](<https://devfeed.tech/tags/latency.md>), [library](<https://devfeed.tech/tags/library.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [performance](<https://devfeed.tech/tags/performance.md>), [prompt](<https://devfeed.tech/tags/prompt.md>)

### AI overview

The article compares how several AI systems improve a Java code-optimization task when given a more detailed prompt. It concludes that prompt refinement improved weaker results, but the systems generally missed the same byte-array optimization and did not consistently reduce duplication, while longer processing did not produce a significantly better answer in this case.

### Source excerpt

In a previous article I looked at one-shoting a solution to optimise code to show the variation in different AI. Thsi is the not the best way to get what you want however. More often you need to either refine the prompt or give feedback. After one-shoting the same prompt on multiple AI, I have created a refined prompt based on the various concerns with previous results. The prompt Based on the results in a previous run Asking multiple AI to optimise the same code Suggest how to implement this more optimally using low latency techniques to minimize any objects created. ## Use - a ThreadLocal for temporary data. - simple maths rather than a library, add comments for clarity if needed. - offset in the form ±hh, ±hhmm, or ±hhmmss, using the shortest form that does not lose information, where hh, mm, and ss are the hours, minutes, and seconds east (+) or west (-) of UT - return a `intern()` String. ## Don't use - String.format - String operations that create objects. - any colons, they aren't required - reduce code duplication ## The code private static String formatOffset(int millis) { String sign = millis < 0 ? "-" : "+"; int saveSecs = Math.abs(millis) / 1000; int hours = saveSecs / 3600; int mins = ((saveSecs / 60) % 60); int secs = (saveSecs % 60); if (secs == 0) { if (mins == 0) { return sign + twoDigitString(hours); } return sign + twoDigitString(hours) + twoDigitString(mins); } return sign + twoDigitString(hours) + twoDigitString(mins) + twoDigitString(secs); } private static String twoDigitString(int value) { return Integer.toString(value + 100).substring(1); } I typically use asciidoc rather than markdown, but trying to keep this example simple. None of the AI considered using a byte[] event though String now uses a byte[] as an underlying store. I asked each one to change the implementation to use a byte[] to create an ISO_8859_1 encoded string which they were able to do, but none suggested it. Gemini 2.5 pro This result is signifciantly improved. Use use of S

## Asking multiple AI to optimise the same code

DevFeed: [Asking multiple AI to optimise the same code](<https://devfeed.tech/articles/asking-multiple-ai-to-optimise-the-same-code-30757.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2025/07/asking-multiple-ai-to-optimise-same-code.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2025-07-16T21:11:00Z

Content type: opinion

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Code](<https://devfeed.tech/topics/code.md>), [long-context](<https://devfeed.tech/topics/long-context.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [context-window](<https://devfeed.tech/tags/context-window.md>), [copilot](<https://devfeed.tech/tags/copilot.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [openai](<https://devfeed.tech/tags/openai.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

The article compares how multiple AI systems optimize the same Java code. It reports that the systems produce different results, with some solutions introducing bugs or taking longer, and recommends using multiple opinions rather than treating one model as consistently best.

### Source excerpt

As different AIs are implemented differently, they don't all provide the same answer, nor do they consistently outperform one another. The best approach is to use multiple AI and pick the one you like best. My goal here is not to declare a winner based on one example, but instead to show the variety of answers you can get with different AI. I asked each AI to Suggest how to implement this more optimally private static String formatOffset(int millis) { String sign = millis < 0 ? "-" : "+"; int saveSecs = Math.abs(millis) / 1000; int hours = saveSecs / 3600; int mins = ((saveSecs / 60) % 60); int secs = (saveSecs % 60); if (secs == 0) { if (mins == 0) { return sign + twoDigitString(hours); } return sign + twoDigitString(hours) + twoDigitString(mins); } return sign + twoDigitString(hours) + twoDigitString(mins) + twoDigitString(secs); } private static String twoDigitString(int value) { return Integer.toString(value + 100).substring(1); } Gemini 2.5 pro While Gemini is often my first go-to AI when I have a large code base, it's not the smartest. It does have a large context window, which means I can dump a large context into it without much thought on my part. However, if you have less than about 6,000 lines of context, you might find that o3-pro, o4-mini-high, or Claude 4 gives a better answer. In this case, it offered in about 10 seconds; private static String formatOffset(int millis) { long totalSeconds = Math.abs((long) millis / 1000); long hours = totalSeconds / 3600; long minutes = (totalSeconds % 3600) / 60; long seconds = totalSeconds % 60; StringBuilder sb = new StringBuilder(); sb.append(millis < 0 ? "-" : "+"); sb.append(String.format("%02d", hours)); if (minutes > 0 || seconds > 0) { sb.append(String.format(":%02d", minutes)); } if (seconds > 0) { sb.append(String.format(":%02d", seconds)); } return sb.toString(); } Not only is this approach slower, but it also fails to achieve the same result, which is even worse. The original format is +HHMMSS without a co

## Prompt Engineering for AIDE

DevFeed: [Prompt Engineering for AIDE](<https://devfeed.tech/articles/prompt-engineering-for-aide-30754.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2025/01/prompt-engineering-for-aide.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2025-01-04T07:11:00Z

Content type: tutorial

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Prompt Engineering](<https://devfeed.tech/topics/prompt-engineering.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Code](<https://devfeed.tech/topics/code.md>), [Development](<https://devfeed.tech/topics/development.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [Java](<https://devfeed.tech/topics/java.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [code](<https://devfeed.tech/tags/code.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [info](<https://devfeed.tech/tags/info.md>), [java](<https://devfeed.tech/tags/java.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [prompt](<https://devfeed.tech/tags/prompt.md>), [prompt-engineering](<https://devfeed.tech/tags/prompt-engineering.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A tutorial on writing structured AsciiDoc requirements as prompts for AI-generated Java code in AIDE. It explains how to specify context, constraints, references, concurrency requirements, performance targets, error handling, and testing needs.

### Source excerpt

This article was AI-generated using this project as context. AIDE Project. The purpose of this project is to see how much an AI could generate given enough context, and in this project, all the "source" code is generated using the requirements and unit tests as context. This follows the Next-Level Development: Harnessing AI with AIDE approach. The main parts are: Requirements Documents in .adoc format. JUnit tests in Java. AIDE itself. AI-generated code in Java. Even the articles written about AIDE are part of the context for the AI. This article is about how to write requirements as a prompt for AI to generate code, seeded with AIDE in the context. Everything after this line is AI generated. Prompt engineering can differentiate between AI-driven code that works and genuinely excels. Drawing insights from real-world Java projects--especially those striving for low latency, high throughput, and clear domain logic--this article will show you how to shape AsciiDoc prompts to engage the AI more effectively. We'll also explore how these techniques fit neatly into AIDE's (Artificial Intelligence Development Environment) documentation-driven approach, building on the examples below. 0. Well-Formed Prompt Examples Strong prompts don't just request code; they specify context, constraints, references, and testing requirements. Below are refined examples of "good prompts" structured to deliver more domain-aligned code and documentation. 0.1 Concurrency-Safe Service Prompt = Concurrency-Safe Order Processor :context: high-throughput trading system We need a Java service that: * Accepts orders via a concurrent queue (Chronicle Queue recommended). * Processes up to 100,000 orders per second. * Ensures thread safety using optimised locking (or lock-free where practical). * Logs all failures (e.g., malformed orders) with a contextual message. Constraints: * Sub-100 µs end-to-end latency per order. * Must pass the existing `OrderProcessorTest` found in xref:order-tests.ad[Order Tests]

## Calendar and Time-Zone Complexities in Software

DevFeed: [Calendar and Time-Zone Complexities in Software](<https://devfeed.tech/articles/dates-aren-t-what-they-used-to-be-30746.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2024/12/pre.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2024-12-20T14:20:00Z

Content type: opinion

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Temporal data](<https://devfeed.tech/topics/temporal-data.md>), [Data analysis](<https://devfeed.tech/topics/data-analysis.md>), [Time Series](<https://devfeed.tech/topics/time-series.md>)

Tags: [exercise](<https://devfeed.tech/tags/exercise.md>), [info](<https://devfeed.tech/tags/info.md>), [pitfalls](<https://devfeed.tech/tags/pitfalls.md>), [time](<https://devfeed.tech/tags/time.md>), [time-series](<https://devfeed.tech/tags/time-series.md>)

### AI overview

This commentary explains why date and time handling is complex in software. It discusses time zones, calendar systems, cultural conventions, and historical changes that can cause incorrect date arithmetic and other defects.

### Source excerpt

I find time fascinating and surprisingly complex. Time zones and calendars change from place to place over time. There are a number of interesting websites on the subject. Time is one of those concepts that appears deceptively simple on the surface yet becomes increasingly intricate the more we examine it. As software developers, we often face scenarios where we must handle dates and times and their myriad associated rules--time zones, calendar systems, cultural conventions, and historical irregularities. Working with time can lead us into subtle pitfalls that affect everything from straightforward user interfaces to global financial systems. Time is an illusion. Lunchtime doubly so. -- Douglas Adams The Hitchhiker's Guide to the Galaxy The Surprising Complexity Behind Time Time is not uniform. Humans have invented calendar systems and measurement techniques, each influenced by politics, religion, and culture. As a result, how we record and interpret dates has repeatedly changed over the centuries. These shifts mean that historical dates do not map cleanly onto modern calendars. The Julian and Gregorian calendars, the French Revolutionary calendar, and the attempts by certain countries to gradually or abruptly adjust to the Gregorian standard all introduce tricky discontinuities. We also have complex local customs, such as the Korean age-counting system, or unique historical anomalies like Sweden's February 30th in 1712. Understanding these anomalies is crucial when dealing with historical data sets, genealogical records, financial time series that stretch back centuries, or any domain that involves retrospective data analysis. From a technical perspective, these complexities translate into potential defects. Off-by-one errors, incorrect conversions, or failure to account for historical shifts can lead to incorrect date arithmetic. Even if you never work with centuries-old data, these quirks are cautionary tales: time is never as straightforward as it first appears. H

## AI on a Hype Cycle

DevFeed: [AI on a Hype Cycle](<https://devfeed.tech/articles/ai-on-a-hype-cycle-30740.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2024/12/ai-on-hype-cycle.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2024-12-15T20:38:00Z

Content type: opinion

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [AI Models](<https://devfeed.tech/topics/ai-models.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [developers](<https://devfeed.tech/tags/developers.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [info](<https://devfeed.tech/tags/info.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [technology](<https://devfeed.tech/tags/technology.md>), [trends](<https://devfeed.tech/tags/trends.md>)

### AI overview

This article examines AI through the lens of technology hype cycles, arguing that developers should learn from past technological trends, maintain perspective about short-term hype, and prepare for AI's longer-term effects.

### Source excerpt

This is the first in a series of posts supporting a talk I will be giving online at JChampionConf 27th January 27th 2025. Lessons learnt from founding my own company, and over 30 years hands on coding In these posts, I am looking to provide some theory as well as practical examples. One way to try to predict what is possible in the future is to look at the past. One of may favourite ways to look at the past is through aphorisms. Aphorisms are short, pithy statements that express a general truth or opinion. I love quotations because it is a joy to find thoughts one might have, beautifully expressed with much authority by someone recognised wiser than oneself. -- Marlene Dietrich 1901-1992 Quotes about Learning from History and Adaptability The only constant is change. -- Heraclitus of Ephesus c. 500 BCE In the ever-evolving realm of AI, this ancient wisdom remains pertinent. Today's cutting-edge AI models may become tomorrow's standard tools. Developers must stay agile, continually updating their skill sets to keep pace with technological advancements. The only constant in the technology industry is change. We are now in the most exciting time of our industry. -- Marc Benioff Salesforce CEO Embracing this change is a hallmark of a senior developer. In an industry where new frameworks, platforms, and tools appear constantly, the ability to evolve, learn from past experiences, and mentor others ensures you remain indispensable. History doesn't repeat itself, but it often rhymes. -- Mark Twain (no definitive written source) Early 20th century History provides a blueprint for what might be possible with AI. By studying previous technological trends, developers can better prepare for the challenges and opportunities that AI presents. We tend to overestimate the effect of a technology in the short run and underestimate the effect in the long run. -- Roy Amara Institute for the Future Known as Amara's Law, this principle is crucial when assessing AI's impact. While the immediate

## A Java Conversion Puzzler: Understanding Implicit Casting and Overflow

DevFeed: [A Java Conversion Puzzler: Understanding Implicit Casting and Overflow](<https://devfeed.tech/articles/a-java-conversion-puzzler-understanding-implicit-casting-and-overflow-30739.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2024/12/a-java-conversion-puzzler-understanding.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2024-12-07T22:23:00Z

Content type: article

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [floating-point](<https://devfeed.tech/topics/floating-point.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [critical](<https://devfeed.tech/tags/critical.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [info](<https://devfeed.tech/tags/info.md>), [java](<https://devfeed.tech/tags/java.md>), [performance](<https://devfeed.tech/tags/performance.md>), [puzzles](<https://devfeed.tech/tags/puzzles.md>)

### AI overview

This article explains a Java conversion puzzle involving compound assignment, implicit casting, floating-point rounding, and integer overflow. It shows why adding 0.0f can produce different results for int and long values, including a conversion to Integer.MIN_VALUE when the rounded value is cast back to int.

### Source excerpt

This article explores a subtle Java conversion puzzle that challenges assumptions about how arithmetic operations, implicit casting, and floating-point conversions interact. Inspired by complexities often encountered in low-latency and high-performance environments, it demonstrates why a keen understanding of Java's type system is essential for building reliable and efficient applications. Introduction The following example demonstrates a scenario where an innocuous-looking arithmetic operation leads to a surprising result. While such questions are rare and arguably impractical, they highlight subtle behaviours that can affect correctness and performance, especially in critical systems like high-frequency trading platforms or complex data-processing pipelines. The Problem: A Surprising Print Statement Consider the following code: int i = Integer.MAX_VALUE; i += 0.0f; int j = i; System.out.println(j == Integer.MAX_VALUE); // true At first glance, one might assume that adding 0.0f to an int should not change its value. Indeed, the output true reinforces this notion. However, if you change int i for long i, things get weird: long i = Integer.MAX_VALUE; // only the type of i is changed i += 0.0f; int j = (int) i; System.out.println(j == Integer.MAX_VALUE); // false System.out.println(j == Integer.MIN_VALUE); // true What is going on, you might wonder? Let me start by explaining why using a long gives such a strange result. Understanding the Implicit Casting The key detail lies in how Java handles the += operator. It is not strictly equivalent to a = a + b; but rather: a += b; has a subtle difference which most of the time doesn't matter: // has an implicity cast here a = (typeOf(a)) (a + b); Another subtle feature of addition is that the result is the "wider" of the two types. This means that: i += 0.0f; is actually: i = (int) ((float) i + 0.0f); // or i = (long) ((float) i + 0.0f); The result of (float) i can be imprecise due to floating-point rounding. A float has a 2

## Why Does Math.round(0.49999999999999994) Round to 1?

DevFeed: [Why Does Math.round(0.49999999999999994) Round to 1?](<https://devfeed.tech/articles/why-does-math-round-0-49999999999999994-round-to-1-30750.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2024/12/why-does-mathround049999999999999994.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2024-12-07T21:02:00Z

Content type: tutorial

Language: en

Sources: [Vanilla Java](<https://devfeed.tech/sources/vanilla-java.md>)

Topics: [floating-point](<https://devfeed.tech/topics/floating-point.md>), [Java](<https://devfeed.tech/topics/java.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [info](<https://devfeed.tech/tags/info.md>), [java](<https://devfeed.tech/tags/java.md>), [precision](<https://devfeed.tech/tags/precision.md>), [programming](<https://devfeed.tech/tags/programming.md>), [puzzles](<https://devfeed.tech/tags/puzzles.md>)

### AI overview

This article explains why Java 6 can return 1 when Math.round() is applied to a value slightly below 0.5. It attributes the result to binary floating-point representation, rounding behavior, and implementation details, and contrasts Java 6 with Java 7.

### Source excerpt

1. Defining the Problem In many numerical computations, one would reasonably expect that rounding 0.499999999999999917 should yield 0, since it appears to be slightly less than 0.5. Yet, in Java 6, calling Math.round() on this value returns 1, a result that may initially seem baffling. This seemingly minor discrepancy stems from the interplay of binary floating-point representation, rounding modes, and the particular internal implementation details of Math.round() in earlier Java releases. For professionals in performance-sensitive environments--such as those working in financial technology or high-precision scientific applications--understanding these subtleties is more than just an academic exercise. Even tiny rounding differences can influence trading algorithms, pricing models, or simulations. Moreover, developers and enthusiasts who appreciate the low-level mechanics behind Java's numeric types will find valuable insights into how these internal workings affect everyday programming tasks. This article delves into why this unexpected rounding occurs, sheds light on the constraints of double-precision arithmetic, and contrasts the behaviour in Java 6 against newer versions like Java 7. Consider, for instance, the closely related question: Why does Math.round(0.49999999999999994) return 1 rather than 0? Although it might initially seem like a bug, it is, in fact, a predictable outcome once we acknowledge the inherent imprecision of floating-point arithmetic. By the end, you will have a clearer understanding of why these rounding anomalies happen, and how to avoid or mitigate their effects in your own code. 2. The IEEE 754 64-bit Double-Precision Format Component Bit Count Interpretation Sign 1 Determines the sign of the number: 0 indicates a positive value, 1 indicates a negative value. Exponent 11 Encodes the exponent using a bias of 1023. The stored value E is interpreted as E - 1023 for the actual exponent. Mantissa (Fraction) 52 Represents the significand (fract

## Using a BGP Route Server in an Internet Exchange Point

DevFeed: [Using a BGP Route Server in an Internet Exchange Point](<https://devfeed.tech/articles/using-a-bgp-route-server-in-an-internet-exchange-point-11094.md>)

Original publisher: [Read original article](<https://blog.ipspace.net/2024/11/bgp-labs-route-server/>)

Published: 2024-11-06T05:25:00Z

Content type: tutorial

Language: en

Sources: [ipSpace.net blog](<https://devfeed.tech/sources/ipspace-net-blog.md>)

Topics: [BGP](<https://devfeed.tech/topics/bgp.md>), [Internet](<https://devfeed.tech/topics/internet.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [browser](<https://devfeed.tech/topics/browser.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [bgp](<https://devfeed.tech/tags/bgp.md>), [browser](<https://devfeed.tech/tags/browser.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [github](<https://devfeed.tech/tags/github.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [internet](<https://devfeed.tech/tags/internet.md>), [ixps](<https://devfeed.tech/tags/ixps.md>), [netlab](<https://devfeed.tech/tags/netlab.md>), [route](<https://devfeed.tech/tags/route.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

This tutorial explains how a BGP route server works in an Internet Exchange Point. It describes how the server propagates BGP updates between EBGP sessions without adding its own AS number to the AS path, and points readers to a lab exercise that can run in GitHub Codespaces or a self-managed lab environment.

### Source excerpt

A BGP route server is like a BGP route reflector but for EBGP sessions. In its simplest implementation, it receives BGP updates over EBGP sessions and propagates them over other EBGP sessions without inserting its own AS number in the AS path (more details). BGP route servers are commonly used on Internet Exchange Points (IXPs), and that's what you can practice in the BGP Route Server in an Internet Exchange Point lab exercise. Read more ...

## Temporal 101: Learn Temporal with TypeScript

DevFeed: [Temporal 101: Learn Temporal with TypeScript](<https://devfeed.tech/articles/temporal-101-learn-temporal-with-typescript-35999.md>)

Original publisher: [Read original article](<https://temporal.io/blog/temporal-101-learn-temporal-with-typescript>)

Author: Kim Schlesinger

Published: 2023-03-14T05:00:00Z

Content type: release

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [Learning](<https://devfeed.tech/topics/learning.md>), [Gitpod](<https://devfeed.tech/topics/gitpod.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>)

Tags: [developers](<https://devfeed.tech/tags/developers.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [free](<https://devfeed.tech/tags/free.md>), [fundamentals](<https://devfeed.tech/tags/fundamentals.md>), [github](<https://devfeed.tech/tags/github.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [install](<https://devfeed.tech/tags/install.md>), [release](<https://devfeed.tech/tags/release.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [videos](<https://devfeed.tech/tags/videos.md>)

### AI overview

Temporal announced a free, self-paced Temporal 101 course in TypeScript for developers who are new to Temporal. The course covers fundamental Temporal concepts through written content, videos, assessments, and hands-on exercises, using a browser-based GitPod environment and the Temporal TypeScript SDK.

### Source excerpt

Announcing the release of our Temporal 101 in TypeScript course, designed for developers who are new to Temporal and want to quickly learn the fundamentals.

## Applied Threat Modeling at BlackHat 2021

DevFeed: [Applied Threat Modeling at BlackHat 2021](<https://devfeed.tech/articles/applied-threat-modeling-at-blackhat-2021-36673.md>)

Original publisher: [Read original article](<https://shostack.org/blog/applied-tm-at-blackhat21/>)

Author: Adam

Published: 2021-06-28T00:00:00Z

Content type: article

Language: en

Sources: [Shostack & Friends Blog](<https://devfeed.tech/sources/shostack-friends-blog.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>), [class](<https://devfeed.tech/topics/class.md>)

Tags: [blackhat](<https://devfeed.tech/tags/blackhat.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [interactive](<https://devfeed.tech/tags/interactive.md>), [skills](<https://devfeed.tech/tags/skills.md>), [students](<https://devfeed.tech/tags/students.md>), [teaching](<https://devfeed.tech/tags/teaching.md>)

### AI overview

An announcement for a hands-on Applied Threat Modeling class at Black Hat USA 2021. The class will teach threat modeling through interactive exercises covering four core questions and an end-to-end exercise.

### Source excerpt

At Blackhat USA, I'll be teaching Applied Threat Modeling.

## Can Training Work Remotely?

DevFeed: [Can Training Work Remotely?](<https://devfeed.tech/articles/can-training-work-remotely-36718.md>)

Original publisher: [Read original article](<https://shostack.org/blog/can-training-work-remotely/>)

Author: Adam

Published: 2021-04-13T00:00:00Z

Content type: opinion

Language: en

Sources: [Shostack & Friends Blog](<https://devfeed.tech/sources/shostack-friends-blog.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [exercise](<https://devfeed.tech/tags/exercise.md>), [remote](<https://devfeed.tech/tags/remote.md>), [students](<https://devfeed.tech/tags/students.md>), [training](<https://devfeed.tech/tags/training.md>), [video](<https://devfeed.tech/tags/video.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

The article considers whether distributed or remote training can work as well as in-person training, especially for threat modeling. It compares the benefits and drawbacks of each format, emphasizing hands-on exercises, peer and instructor feedback, flexible exercise timing, and the advantages of video lectures that participants can replay or speed up.

### Source excerpt

I get this question a lot: Can distributed/remote training work as well as in person? Especially for threat modeling, where there's a strong expectation that training involves whiteboards...

## Prime Table Generator in Jetpack Compose

DevFeed: [Prime Table Generator in Jetpack Compose](<https://devfeed.tech/articles/prime-table-generator-in-jetpack-compose-27079.md>)

Original publisher: [Read original article](<https://zsmb.co/prime-table-generator-jetpack-compose/>)

Author: Márton Braun

Published: 2021-03-25T16:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [coding](<https://devfeed.tech/tags/coding.md>), [compose](<https://devfeed.tech/tags/compose.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [projects](<https://devfeed.tech/tags/projects.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A tutorial that revisits a prime-number visualization project and rebuilds it for Android using Jetpack Compose. It explains the prime table design, creates a grid of squares, and begins implementing individual square rendering with Compose APIs.

### Source excerpt

I've dusted off one of my oldest (and favourite) coding projects, and rewrote it in Jetpack Compose as a nice little practice exercise.

## Threat Modeling Training at Blackhat 2020

DevFeed: [Threat Modeling Training at Blackhat 2020](<https://devfeed.tech/articles/threat-modeling-training-at-blackhat-2020-37052.md>)

Original publisher: [Read original article](<https://shostack.org/blog/threat-modeling-training-at-blackhat-2020/>)

Author: Adam

Published: 2020-03-02T00:00:00Z

Content type: article

Language: en

Sources: [Shostack & Friends Blog](<https://devfeed.tech/sources/shostack-friends-blog.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [blackhat](<https://devfeed.tech/tags/blackhat.md>), [class](<https://devfeed.tech/tags/class.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [interactive](<https://devfeed.tech/tags/interactive.md>), [skills](<https://devfeed.tech/tags/skills.md>), [students](<https://devfeed.tech/tags/students.md>), [training](<https://devfeed.tech/tags/training.md>)

### AI overview

The article announces hands-on threat modeling training at Black Hat 2020. The interactive class covers threat modeling steps, common traps, four key questions, and an end-to-end exercise, with sessions scheduled for August 1-2 and August 3-4.

### Source excerpt

At Blackhat this summer, I'll be offering threat modeling training at Blackhat. Last year, these sold out quickly, so don't wait!

## Date puzzle for starters

DevFeed: [Date puzzle for starters](<https://devfeed.tech/articles/date-puzzle-for-starters-34395.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2010/10/date-puzzle-for-starters/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2010-10-08T08:00:00Z

Content type: article

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [function](<https://devfeed.tech/topics/function.md>), [IRC](<https://devfeed.tech/topics/irc.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [function](<https://devfeed.tech/tags/function.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [puzzle](<https://devfeed.tech/tags/puzzle.md>)

### AI overview

A PostgreSQL date puzzle explores how to identify the nth occurrence of a specified weekday within a month. The article discusses an unfinished function and leaves improvements--such as supporting multiple nth weekdays--as an exercise for readers.

### Source excerpt

The PostgreSQL IRC channel is a good place to be, for all the very good help you can get there, because people are always wanting to remain helpful, because of the off-topics discussions sometime, or to get to talk with community core members. And to start up your day too. This morning's question started simple : "how can I check if today is the "first sunday fo the month". or "the second tuesday of the month" etc?"