# repeat

Published articles for repeat.

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

## One or two nameservers?

DevFeed: [One or two nameservers?](<https://devfeed.tech/articles/one-or-two-nameservers-26233.md>)

Original publisher: [Read original article](<https://blog.apnic.net/2026/09/15/one-or-two-nameservers/>)

Author: Geoff Huston

Published: 2026-09-15T06:01:49Z

Content type: article

Language: en

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

Topics: [Internet](<https://devfeed.tech/topics/internet.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>), [Server](<https://devfeed.tech/topics/server.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [africa](<https://devfeed.tech/tags/africa.md>), [article](<https://devfeed.tech/tags/article.md>), [china](<https://devfeed.tech/tags/china.md>), [dns](<https://devfeed.tech/tags/dns.md>), [europe](<https://devfeed.tech/tags/europe.md>), [experiment](<https://devfeed.tech/tags/experiment.md>), [india](<https://devfeed.tech/tags/india.md>), [internet](<https://devfeed.tech/tags/internet.md>), [ipv4](<https://devfeed.tech/tags/ipv4.md>), [ipv6](<https://devfeed.tech/tags/ipv6.md>), [measurement](<https://devfeed.tech/tags/measurement.md>), [measurements](<https://devfeed.tech/tags/measurements.md>), [recursive-resolver](<https://devfeed.tech/tags/recursive-resolver.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [responses](<https://devfeed.tech/tags/responses.md>), [server](<https://devfeed.tech/tags/server.md>), [tech-matters](<https://devfeed.tech/tags/tech-matters.md>)

### AI overview

This article reports an experiment testing whether serving a DNS zone with two authoritative dual-stack nameservers changes repeated queries. Compared with one nameserver, two nameservers increased the single-query completion rate from 58% to 71% and reduced the average queries per test from 3.43 to 2.57.

### Source excerpt

Do multiple dual-stack nameservers increase or decrease repeat DNS queries? The results of this experiment were a complete surprise.

## Create animated stripes in Jetpack Compose

DevFeed: [Create animated stripes in Jetpack Compose](<https://devfeed.tech/articles/create-animated-stripes-in-jetpack-compose-25770.md>)

Original publisher: [Read original article](<https://www.sinasamaki.com/create-animated-stripes-in-jetpack-compose/>)

Author: sinasamaki

Published: 2025-12-05T18:11:39Z

Content type: tutorial

Language: en

Sources: [sinasamaki](<https://devfeed.tech/sources/sinasamaki.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [building](<https://devfeed.tech/tags/building.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [design](<https://devfeed.tech/tags/design.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [learn](<https://devfeed.tech/tags/learn.md>), [list](<https://devfeed.tech/tags/list.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [rotation](<https://devfeed.tech/tags/rotation.md>)

### AI overview

A tutorial on creating and animating repeating stripe patterns in Jetpack Compose using gradients, color stops, tiling, offsets, and a helper function based on weighted colors, repetition width, and angle.

### Source excerpt

Use default gradients to create mesmerizing patterns in your app

## Effective Kotlin Item 19: Do not repeat knowledge

DevFeed: [Effective Kotlin Item 19: Do not repeat knowledge](<https://devfeed.tech/articles/effective-kotlin-item-19-do-not-repeat-knowledge-39282.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-knowledge>)

Published: 2024-01-08T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [data](<https://devfeed.tech/topics/data.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [programming](<https://devfeed.tech/tags/programming.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This article explains why repeated knowledge in a programming project can be problematic. It connects copy-paste, DRY, WET, and Single Source of Truth practices, then distinguishes program logic from common algorithms based on how often they change.

### Source excerpt

Why knowledge repetition is so problematic and how it relates to the single responsibility principle.

## Introducing Vectordrawable-Seekable

DevFeed: [Introducing Vectordrawable-Seekable](<https://devfeed.tech/articles/introducing-vectordrawable-seekable-23103.md>)

Original publisher: [Read original article](<https://medium.com/android-news/introducing-vectordrawable-seekable-b96ef57ffe36?source=rss----8fca399d4de---4>)

Author: Alistair Sykes

Published: 2020-05-11T13:35:28Z

Content type: tutorial

Language: en

Sources: [Android & Tech News -- Medium](<https://devfeed.tech/sources/android-tech-news-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [media3](<https://devfeed.tech/topics/media3.md>), [XML](<https://devfeed.tech/topics/xml.md>), [Library](<https://devfeed.tech/topics/library.md>), [SDK](<https://devfeed.tech/topics/sdk.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [animation](<https://devfeed.tech/tags/animation.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [library](<https://devfeed.tech/tags/library.md>), [material-design](<https://devfeed.tech/tags/material-design.md>), [play](<https://devfeed.tech/tags/play.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [screen](<https://devfeed.tech/tags/screen.md>), [vector](<https://devfeed.tech/tags/vector.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

This tutorial introduces the Vectordrawable-Seekable library for Android. It explains how Core-Animation and SeekableAnimatedVectorDrawable add pause and seek controls to animated vector drawables, then demonstrates creating vector, animation, and drawable XML resources and displaying the result.

### Source excerpt

Using the new and improved AnimatedVectorDrawable to pause and seek your animations.AnimatedVectorDrawable Android SDK 21 introduced both the VectorDrawable and the AnimatedVectorDrawable. This allowed you to use vector assets within your app, and even animate them. They've iterated on these since then, but AnimatedVectorDrawable was still missing something. You couldn't manipulate and control the animation. There was no pause or seek functionality. Core-Animation The Android team has been hard at work backporting the framework Animator APIs. They have created a separate unbundled AndroidX library called Core-Animation. The Animator APIs have been around for some time. But they didn't provide the capabilities needed for this pause and seek functionality. So they needed to be unbundled and then iterated on. Vectordrawable-Seekable Once Core-Animation was available the Android team could create the Vectordrawable-Seekable library. This library revolves around the class SeekableAnimatedVectorDrawable. Under the hood, this class uses the AnimatorSet and subsequently Animator from Core-Animation. These provide the pause and seek functionality. How toCreate the vector Firstly, you need a vector asset of the image you wish to animate. This works best if it is simple and optimised. See these resources for information on optimising assets: - https://www.brightec.co.uk/blog/creating-vector-drawables-android - https://arturdryomov.dev/posts/optimizing-android-vector-images/ For this example I am going to use an Android: https://medium.com/media/c1f49ee65961374471c7019479d595cf/href This XML file should be placed in your res/drawable directory. Notice the group names, as these allow us to reference each part of the image later. Notice also the pivot points defined. These define the pivot around which rotation would happen. Create the animation To define the animation itself you can create another XML file. This defines an ObjectAnimator. https://medium.com/media/51350379510a257

## Java 9 Flow API: arbitration and concatenation

DevFeed: [Java 9 Flow API: arbitration and concatenation](<https://devfeed.tech/articles/java-9-flow-api-arbitration-and-concatenation-24807.md>)

Original publisher: [Read original article](<https://akarnokd.blogspot.com/2017/09/java-9-flow-api-arbitration-and.html>)

Author: David Karnok (noreply@blogger.com)

Published: 2017-09-27T12:55:00Z

Content type: tutorial

Language: en

Sources: [Akarnokd - Advanced RxJava](<https://devfeed.tech/sources/akarnokd-advanced-rxjava.md>)

Topics: [Java 9](<https://devfeed.tech/topics/java-9.md>), [Java](<https://devfeed.tech/topics/java.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [arbiter](<https://devfeed.tech/tags/arbiter.md>), [arbitration](<https://devfeed.tech/tags/arbitration.md>), [concat](<https://devfeed.tech/tags/concat.md>), [concatenation](<https://devfeed.tech/tags/concatenation.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [event](<https://devfeed.tech/tags/event.md>), [flow](<https://devfeed.tech/tags/flow.md>), [flow-api](<https://devfeed.tech/tags/flow-api.md>), [java](<https://devfeed.tech/tags/java.md>), [java-9](<https://devfeed.tech/tags/java-9.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [onerrorresumenext](<https://devfeed.tech/tags/onerrorresumenext.md>), [publisher](<https://devfeed.tech/tags/publisher.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [request](<https://devfeed.tech/tags/request.md>), [retry](<https://devfeed.tech/tags/retry.md>), [submissionpublisher](<https://devfeed.tech/tags/submissionpublisher.md>), [subscriber](<https://devfeed.tech/tags/subscriber.md>), [subscription](<https://devfeed.tech/tags/subscription.md>), [subscriptionarbiter](<https://devfeed.tech/tags/subscriptionarbiter.md>)

### AI overview

This tutorial explains how to implement subscription arbitration for Java 9's Flow API when concatenating multiple publishers. It addresses stack growth, remaining-demand accounting, concurrent requests and cancellation, subscription switching, and produced-item tracking.

### Source excerpt

Introduction A very common task is to combine multiple sources, or more generally, start consuming a source once the previous source has terminated. The naive approach would be to simply call otherSource.subscribe(nextSubscriber) from onError or onComplete. Unfortunately, this doesn't work for two reasons: 1) it may end up with deep stacks due to a "tail" subscription from onError/onComplete and 2) we should request the remaining, unfulfilled amount from the new source that hasn't be provided by the previous source to not overflow the downstream. The first issue can be solved by applying a heavyweight observeOn in general and implementing a basic trampolining loop only for certain concrete cases such as flow concatenation to be described in this post. The second issue requires a more involved source: not only do we have to switch between Flow.Subscriptions from different sources, we have to make sure concurrent request() invocations are not lost and are routed to the proper Flow.Subscription along with any concurrent cancel() calls. Perhaps the difficulty is lessened by the fact that switching sources happens on a terminal event boundary only, thus we don't have to worry about the old source calling onNext while the logic switches to the new source and complicating the accounting of requested/emitted item counts. Enter SubscriptionArbiter. Subscription arbitration We have to deal with 4 types of potentially concurrent signals when arbitrating Flow.Subscriptions: A request(long) call from downstream that has to be routed to the current Flow.Subscription A cancel() call from downstream that has to be routed to the current Flow.Subscription and cancel any future Flow.Subscription. A setSubscription(Flow.Subscription) that is called by the current Flow.Subscriber after subscribing to any Flow.Publisher which is not guaranteed to happen on the same thread subscribe() is called (i.e., as with the standard SubmissionPublisher or our range() operator). A setProduced(long n)

## Better Parameterized Tests with Burst

DevFeed: [Better Parameterized Tests with Burst](<https://devfeed.tech/articles/better-parameterized-tests-with-burst-15545.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/better-parameterized-tests-with-burst>)

Author: Square Engineering

Published: 2014-10-21T16:08:00Z

Content type: tutorial

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>), [Square Corner Blog](<https://devfeed.tech/sources/square-corner-blog-medium.md>), [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [automated](<https://devfeed.tech/tags/automated.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [enum](<https://devfeed.tech/tags/enum.md>), [enums](<https://devfeed.tech/tags/enums.md>), [framework](<https://devfeed.tech/tags/framework.md>), [generate](<https://devfeed.tech/tags/generate.md>), [object](<https://devfeed.tech/tags/object.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [running](<https://devfeed.tech/tags/running.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

This article introduces Burst, an alternate data variation mechanism for JUnit tests. It explains how enum parameters can generate combinations of class-level and method-level tests, including support for JUnit 3 and Android's testing framework.

### Source excerpt

An alternate data variation mechanism for JUnit tests.