# rewrite

Published articles for rewrite.

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

## The Third-Generation GUI Builder: One Workspace for Every Form

DevFeed: [The Third-Generation GUI Builder: One Workspace for Every Form](<https://devfeed.tech/articles/the-third-generation-gui-builder-one-workspace-for-every-form-19555.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/third-generation-gui-builder/>)

Author: Shai Almog

Published: 2026-08-14T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [GUI](<https://devfeed.tech/topics/gui.md>), [Maven](<https://devfeed.tech/topics/maven.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [gui](<https://devfeed.tech/tags/gui.md>), [java](<https://devfeed.tech/tags/java.md>), [projects](<https://devfeed.tech/tags/projects.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

Codename One has rebuilt its GUI Builder for a third generation. The new project-oriented workspace preserves guided layout while integrating Maven project structure, forms, live CSS, protected Java regions, and switching between forms.

### Source excerpt

Codename One's third-generation GUI Builder keeps the guided layout work from the previous editor and rebuilds the workflow around Maven projects, live CSS, protected Java regions, and fast switching between forms.

## Migrating a Large Flow Monorepo to TypeScript

DevFeed: [Migrating a Large Flow Monorepo to TypeScript](<https://devfeed.tech/articles/migrating-a-large-flow-monorepo-to-typescript-27431.md>)

Original publisher: [Read original article](<https://engineeringblog.yelp.com/2026/08/migrating-a-large-flow-monorepo-to-typescript.html>)

Author: Shawn Walton, Software Engineer

Published: 2026-08-04T00:00:00Z

Content type: article

Language: en

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

Topics: [monorepo](<https://devfeed.tech/topics/monorepo.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [migration](<https://devfeed.tech/topics/migration.md>), [repo](<https://devfeed.tech/topics/repo.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [coverage](<https://devfeed.tech/tags/coverage.md>), [integrity](<https://devfeed.tech/tags/integrity.md>), [migration](<https://devfeed.tech/tags/migration.md>), [monorepo](<https://devfeed.tech/tags/monorepo.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [typescript](<https://devfeed.tech/tags/typescript.md>)

### AI overview

Yelp describes its gradual migration of a large Flow monorepo to TypeScript. The team chose a package-by-package approach to preserve type-checking trust and type safety while Flow and TypeScript coexisted in production, using open-source conversion tooling, custom codemods, and manual fixes.

### Source excerpt

In early 2017, Webcore selected Flow as Yelp's next-generation typechecker over TypeScript. At the time there was no clear frontrunner. Flow had better support for React, better performance, and a respectable repository of types for NPM packages in flow-typed. However, a few years later the landscape had shifted, and it became clear that TypeScript was emerging as the stronger choice. TypeScript's DefinitelyTyped repo had thousands more packages than flow-typed, and many more packages shipped with built-in TypeScript headers. TypeScript also proved to be more stable over time, and limited uptake in the wider JS community made finding tools and documentation...

## Strategies for Migrating from a Monolith to Microservices

DevFeed: [Strategies for Migrating from a Monolith to Microservices](<https://devfeed.tech/articles/monolith-to-service-architecture-34687.md>)

Original publisher: [Read original article](<https://newsletter.systemdesigncodex.com/p/monolith-to-service-architecture>)

Author: Saurabh Dashora

Published: 2026-06-23T07:55:12Z

Content type: tutorial

Language: en

Sources: [System Design Codex](<https://devfeed.tech/sources/system-design-codex.md>)

Topics: [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [microservices architecture](<https://devfeed.tech/topics/microservices-architecture.md>), [migration](<https://devfeed.tech/topics/migration.md>), [legacy systems](<https://devfeed.tech/topics/legacy-systems.md>), [gateway](<https://devfeed.tech/topics/gateway.md>)

Tags: [api-gateway](<https://devfeed.tech/tags/api-gateway.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [automated](<https://devfeed.tech/tags/automated.md>), [big-bang](<https://devfeed.tech/tags/big-bang.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [legacy-systems](<https://devfeed.tech/tags/legacy-systems.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [migration](<https://devfeed.tech/tags/migration.md>), [monolith](<https://devfeed.tech/tags/monolith.md>), [parallel](<https://devfeed.tech/tags/parallel.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [strategies](<https://devfeed.tech/tags/strategies.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial outlines patterns for gradually moving from a monolithic architecture to microservices. It describes the Strangler Fig Pattern, Parallel Run Pattern, and Collaborator Pattern, covering techniques such as API gateways, incremental migration, traffic splitting, feature flags, and automated comparison testing.

### Source excerpt

Top Strategies

## Improve AI output with continuous improvement

DevFeed: [Improve AI output with continuous improvement](<https://devfeed.tech/articles/improve-ai-output-with-continuous-improvement-16648.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2026/01/continuous-improvement>)

Author: Alexander Nohe; Dan Gruhl

Published: 2026-01-13T00:00:00Z

Content type: tutorial

Language: en

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

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Chain-of-thought](<https://devfeed.tech/topics/chain-of-thought.md>)

Tags: [adk](<https://devfeed.tech/tags/adk.md>), [agentic](<https://devfeed.tech/tags/agentic.md>), [ai](<https://devfeed.tech/tags/ai.md>), [automated](<https://devfeed.tech/tags/automated.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [prompting](<https://devfeed.tech/tags/prompting.md>), [python](<https://devfeed.tech/tags/python.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [verify](<https://devfeed.tech/tags/verify.md>)

### AI overview

A tutorial explains continuous improvement, a prompting strategy in which one AI generates an output and another AI critiques it before the first AI revises the result. It demonstrates the approach with ADK and LoopAgent for designing gym workouts.

### Source excerpt

Learn how to improve your AI outputs to a more reliable output through continuous improvement.

## Out with the Old, In with the New: A Guide to Application Upkeep

DevFeed: [Out with the Old, In with the New: A Guide to Application Upkeep](<https://devfeed.tech/articles/out-with-the-old-in-with-the-new-a-guide-to-application-upkeep-23026.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/out-with-the-old-in-with-the-new.html>)

Author: Andres Sacco

Published: 2025-12-20T03:08:59Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [migration](<https://devfeed.tech/topics/migration.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [Vulnerabilities](<https://devfeed.tech/topics/vulnerabilities.md>), [Security](<https://devfeed.tech/topics/security.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [automatic](<https://devfeed.tech/tags/automatic.md>), [guide](<https://devfeed.tech/tags/guide.md>), [java](<https://devfeed.tech/tags/java.md>), [legacy-application](<https://devfeed.tech/tags/legacy-application.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [migration](<https://devfeed.tech/tags/migration.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [security](<https://devfeed.tech/tags/security.md>), [spring](<https://devfeed.tech/tags/spring.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>)

### AI overview

This guide explains why upgrading Java or Spring Boot applications involves more than changing a version number. It discusses migration challenges, legacy code, differing versions across microservices, and risks from outdated software, including security, compatibility, stability, and maintainability concerns.

### Source excerpt

Migrating an existing application to a new version of Java or a framework such as Spring Boot involves much more than simply updating a version number in a file. Each new release of a library or language brings new features, deprecations, behavioral changes, and sometimes complete API redesigns. When legacy code is involved, these upgrades [...] The post Out with the Old, In with the New: A Guide to Application Upkeep appeared first on JVM Advent.

## \[RevEng\] Toy decompiler

DevFeed: [\[RevEng\] Toy decompiler](<https://devfeed.tech/articles/reveng-toy-decompiler-20582.md>)

Original publisher: [Read original article](<https://yurichev.com/blog/toy_decompiler/>)

Published: 2025-11-16T23:00:00Z

Content type: article

Language: en

Sources: [Dennis Yurichev](<https://devfeed.tech/sources/dennis-yurichev.md>)

Topics: [Assembly](<https://devfeed.tech/topics/assembly.md>), [Code](<https://devfeed.tech/topics/code.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Python](<https://devfeed.tech/topics/python.md>), [C](<https://devfeed.tech/topics/c.md>), [gcc](<https://devfeed.tech/topics/gcc.md>)

Tags: [assembly](<https://devfeed.tech/tags/assembly.md>), [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [python](<https://devfeed.tech/tags/python.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

This article describes a toy decompiler for Xilinx MicroBlaze assembly. It manually and programmatically rewrites chains of addk and rsubk instructions into multiplication expressions, using Python regular expressions and tests, then discusses limitations including GCC optimization and the experimental nature of the implementation.

### Source excerpt

[RevEng] Toy decompiler

## The rewrite dilemma in software engineering

DevFeed: [The rewrite dilemma in software engineering](<https://devfeed.tech/articles/the-rewrite-dilemma-in-software-engineering-38748.md>)

Original publisher: [Read original article](<https://www.paleblueapps.com/rockandnull/rewrites-software-engineering-stability/>)

Author: Mike Yerou

Published: 2025-11-06T12:10:38Z

Content type: opinion

Language: en

Sources: [Rock and Null](<https://devfeed.tech/sources/rock-and-null.md>)

Topics: [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [engineering](<https://devfeed.tech/tags/engineering.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [software](<https://devfeed.tech/tags/software.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>)

### AI overview

The article examines the trade-offs of rewriting existing software. It argues that accumulated fixes, edge-case handling, testing, and historical knowledge can make a messy system stable, so improving working code may be wiser than starting over.

### Source excerpt

Rewriting software can be tempting, but understanding the hidden value of accumulated fixes and system stability is key to making the right decision.

## Ten years of Overcast: A new foundation

DevFeed: [Ten years of Overcast: A new foundation](<https://devfeed.tech/articles/ten-years-of-overcast-a-new-foundation-38593.md>)

Original publisher: [Read original article](<https://marco.org/2024/07/16/overcast-rewrite>)

Author: Marco Arment

Published: 2024-07-16T12:57:40Z

Content type: article

Language: en

Sources: [Marco.org](<https://devfeed.tech/sources/marco-org.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Playback](<https://devfeed.tech/topics/playback.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>)

Tags: [accessible](<https://devfeed.tech/tags/accessible.md>), [app](<https://devfeed.tech/tags/app.md>), [apple](<https://devfeed.tech/tags/apple.md>), [faster](<https://devfeed.tech/tags/faster.md>), [launch](<https://devfeed.tech/tags/launch.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [playback](<https://devfeed.tech/tags/playback.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [redesign](<https://devfeed.tech/tags/redesign.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>), [storage](<https://devfeed.tech/tags/storage.md>), [streaming](<https://devfeed.tech/tags/streaming.md>), [sync](<https://devfeed.tech/tags/sync.md>)

### AI overview

Overcast has launched a substantial rewrite and redesign of most of its iOS app for its tenth anniversary. The update improves responsiveness, reliability, accessibility, navigation, and controls, while retaining most features and the existing audio engine. Streaming has been replaced by downloading episodes before playback, and several missing features are planned to return.

### Source excerpt

Today, on the tenth anniversary of Overcast 1.0, I'm happy to launch a complete rewrite and redesign of most of the iOS app, built to carry Overcast into the next decade -- and hopefully beyond. Like podcasts better than blog posts? Listen to ATP #596 for more! What's new Much faster, more responsive, more reliable, and more accessible. Modern design, optimized for easily-reached controls on today's phone sizes. Improvements throughout, such as undoing large seeks, new playlist-priority options, easier navigation, and more. What's not Most features. Overcast is still Overcast! The audio engine. It's the best part of Overcast, and still leads the industry in sound quality, silence skipping, and volume normalization. (More soon!) The business. I'm still a one-person operation, with no funding or external ownership, serving only my customers. My principles. I always want to make the best podcast app, and I'll never disrespect your time, attention, or privacy. What's gone Streaming. Most big podcasts now use dynamic ad insertion, which causes bugs and problems for streaming playback.1 Downloading episodes completely before they begin playback is much more reliable. Tapping a non-downloaded episode will now open the playback screen, download it, then start playback. It works similarly to the way streaming did before, but playback begins after the download completes, not after a portion of it is buffered. On today's fast networks, this usually only takes a few extra seconds. And in the near future, I'll be adding smarter options and more control over selective downloading of episodes to further improve the experience for people who don't automatically download every episode. What's next The last few missing features from the old app, such as Shortcuts support, storage management, and OPML. These are absent now, but will return soon. More options for downloading and deleting episodes. Upgrading the Apple Watch app to the new, faster sync engine. (The Watch app is currently

## Open-sourcing our progress on Tailwind CSS v4.0

DevFeed: [Open-sourcing our progress on Tailwind CSS v4.0](<https://devfeed.tech/articles/open-sourcing-our-progress-on-tailwind-css-v4-0-3502.md>)

Original publisher: [Read original article](<https://tailwindcss.com/blog/tailwindcss-v4-alpha>)

Published: 2024-03-06T16:30:00Z

Content type: release

Language: en

Sources: [Tailwind CSS Blog](<https://devfeed.tech/sources/tailwind-css-blog.md>)

Topics: [Tailwind CSS](<https://devfeed.tech/topics/tailwind.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Rust](<https://devfeed.tech/topics/rust.md>), [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Parsing](<https://devfeed.tech/topics/parsing.md>), [PostCSS](<https://devfeed.tech/topics/postcss.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [css](<https://devfeed.tech/tags/css.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [features](<https://devfeed.tech/tags/features.md>), [framework](<https://devfeed.tech/tags/framework.md>), [open](<https://devfeed.tech/tags/open.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [performance](<https://devfeed.tech/tags/performance.md>), [pipeline](<https://devfeed.tech/tags/pipeline.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [release](<https://devfeed.tech/tags/release.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [rust](<https://devfeed.tech/tags/rust.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [tailwind](<https://devfeed.tech/tags/tailwind.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [web-platform](<https://devfeed.tech/tags/web-platform.md>)

### AI overview

Tailwind CSS announces the first public v4.0.0-alpha of its rewritten Oxide engine. The release focuses on faster builds, a smaller installed footprint, Rust-based performance improvements while retaining a TypeScript core, a custom parser, and integrated CSS processing through Lightning CSS.

### Source excerpt

We just tagged the first public v4.0.0-alpha so you can start experimenting with it and help us get to a stable release later this year.

## Why Zed rewrote its GPUI UI framework from version 1 to version 2

DevFeed: [Why Zed rewrote its GPUI UI framework from version 1 to version 2](<https://devfeed.tech/articles/why-the-big-rewrite-13567.md>)

Original publisher: [Read original article](<https://zed.dev/blog/why-the-big-rewrite>)

Author: Thorsten Ball

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

Content type: opinion

Language: en

Sources: [Zed Industries - Blog](<https://devfeed.tech/sources/zed-industries-blog.md>)

Topics: [Framework](<https://devfeed.tech/topics/framework.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [framework](<https://devfeed.tech/tags/framework.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

An editorialized interview with Zed co-founders Nathan, Max, and Antonio about the team's multi-month rewrite of the GPUI framework from version 1 to version 2. They discuss why GPUI 1 had to change, the risks and organization of the rewrite, and the value of revisiting a system after learning from its first version.

### Source excerpt

Thorsten interviews co-founders Nathan, Max, Antonio in his first week at Zed about the rewrite from GPUI1 to GPUI2

## MLIR -- Canonicalizers and Declarative Rewrite Patterns

DevFeed: [MLIR -- Canonicalizers and Declarative Rewrite Patterns](<https://devfeed.tech/articles/mlir-canonicalizers-and-declarative-rewrite-patterns-40477.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2023/09/20/mlir-canonicalizers-and-declarative-rewrite-patterns/>)

Published: 2023-09-20T08:00:00Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [canonicalization](<https://devfeed.tech/tags/canonicalization.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [complex-numbers](<https://devfeed.tech/tags/complex-numbers.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [mlir](<https://devfeed.tech/tags/mlir.md>), [polynomials](<https://devfeed.tech/tags/polynomials.md>), [primer](<https://devfeed.tech/tags/primer.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [tablegen](<https://devfeed.tech/tags/tablegen.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This tutorial explains how to implement general canonicalization patterns in MLIR. It covers both C++ canonicalizers and declarative rewrite rules in TableGen, including an identity-based polynomial rewrite and its testing considerations.

### Source excerpt

Table of Contents In a previous article we defined folding functions, and used them to enable some canonicalization and the sccp constant propagation pass for the poly dialect. This time we'll see how to add more general canonicalization patterns. The code for this article is in this pull request, and as usual the commits are organized to be read in order. Why is Canonicalization Needed? MLIR provides folding as a mechanism to simplify an IR, which can result in simpler, more efficient ops (e.

## The Verse Calculus: a Core Calculus for Functional Logic Programming

DevFeed: [The Verse Calculus: a Core Calculus for Functional Logic Programming](<https://devfeed.tech/articles/the-verse-calculus-a-core-calculus-for-functional-logic-programming-29489.md>)

Original publisher: [Read original article](<http://lambda-the-ultimate.org/node/5662>)

Published: 2022-12-12T16:23:17Z

Content type: article

Language: en

Sources: [Lambda the Ultimate](<https://devfeed.tech/sources/lambda-the-ultimate.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Math and Logic](<https://devfeed.tech/topics/math-and-logic.md>)

Tags: [draft](<https://devfeed.tech/tags/draft.md>), [functional](<https://devfeed.tech/tags/functional.md>), [lambda-calculus](<https://devfeed.tech/tags/lambda-calculus.md>), [languages](<https://devfeed.tech/tags/languages.md>), [logic](<https://devfeed.tech/tags/logic.md>), [paper](<https://devfeed.tech/tags/paper.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [semantics](<https://devfeed.tech/tags/semantics.md>)

### AI overview

The draft paper introduces the Verse calculus (VC), a core calculus for functional logic programming. Its main contribution is a small-step rewrite semantics that enables reasoning about VC programs through successive rewrites, as with lambda calculus. The authors note that the design is still a work in progress and that the current rewrite rules may not be confluent.

### Source excerpt

The Verse Calculus: a Core Calculus for Functional Logic Programming https://simon.peytonjones.org/assets/pdfs/verse-conf.pdf LENNART AUGUSTSSON, Epic Games, Sweden JOACHIM BREITNER KOEN CLAESSEN, Epic Games, Sweden RANJIT JHALA, Epic Games, USA SIMON PEYTON JONES, Epic Games, United Kingdom OLIN SHIVERS, Epic Games, USA/li> TIM SWEENEY, Epic Games, USA Functional logic languages have a rich literature, but it is tricky to give them a satisfying semantics. In this paper we describe the Verse calculus, VC, a new core calculus for functional logical programming. Our main contribution is to equip VC with a small-step rewrite semantics, so that we can reason about a VC program in the same way as one does with lambda calculus; that is, by applying successive rewrites to it. This draft paper describes our current thinking about Verse. It is very much a work in progress, not a finished product. The broad outlines of the design are stable. However, the details of the rewrite rules may well change; we think that the current rules are not confluent, in tiresome ways. (If you are knowledgeable about confluence proofs, please talk to us!)We are eager to enagage in a dialogue with the community. Please do write to us.

## Apollo iOS Client 1.0 with improved code generation

DevFeed: [Apollo iOS Client 1.0 with improved code generation](<https://devfeed.tech/articles/apollo-ios-client-1-0-with-improved-code-generation-23196.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/apollo-ios-client-1-0-with-improved-code-generation>)

Author: John Vajda

Published: 2022-10-03T16:49:21Z

Content type: release

Language: en

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

Topics: [Code generation](<https://devfeed.tech/topics/code-generation.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [apollo](<https://devfeed.tech/tags/apollo.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [developers](<https://devfeed.tech/tags/developers.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [ios](<https://devfeed.tech/tags/ios.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [npm](<https://devfeed.tech/tags/npm.md>), [performance](<https://devfeed.tech/tags/performance.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tests](<https://devfeed.tech/tags/tests.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

Apollo announces Apollo iOS Client 1.0, which replaces its previous TypeScript-based code-generation tooling with a Swift rewrite. The release describes improvements including reduced dependencies, faster performance, simpler configuration, smaller and less complex generated code, improved data validation, and better support for testing generated models.

### Source excerpt

As developers, we all know code generation can save us a ton of time, but can also be a pain point if the generated code needs to be refactored. When it works as expected code generation provides us with: productivity, simplification, portability, and consistency. When it doesn't work as expected we experience consistency issues and code maintenance overhead.

## Reasons a company considers replacing its backend technology stack

DevFeed: [Reasons a company considers replacing its backend technology stack](<https://devfeed.tech/articles/why-we-at-famous-company-switched-to-hyped-technology-27357.md>)

Original publisher: [Read original article](<https://saagarjha.com/blog/2020/05/10/why-we-at-famous-company-switched-to-hyped-technology/>)

Published: 2020-05-10T00:00:00Z

Content type: opinion

Language: en

Sources: [Saagar Jha](<https://devfeed.tech/sources/saagar-jha.md>)

Topics: [Back end](<https://devfeed.tech/topics/backend.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [latency](<https://devfeed.tech/tags/latency.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

A company describes considering a replacement for its backend technology stack. The stated concerns include latency spikes associated with garbage collection and difficulty hiring developers for its existing language.

### Source excerpt

When $FAMOUS_COMPANY launched in 2010, it ran on a single server in $TECHBRO_FOUNDER's garage. Since then, we've experienced explosive VC-funded growth and today we have hundreds of millions of daily active users (DAUs) from all around the globe accessing our products from our mobile apps and on $famouscompany.com. We've since made a couple of panic-induced changes to our backend to manage our technical debt (usually right after a high-profile outage) to keep our servers from keeling over. Our existing technology stack has served us well for all these years, but as we seek to grow further it's clear that a complete rewrite of our application is something which will somehow prevent us from losing two billion dollars a year on customer acquisition.

## Camera Kit Rewrite

DevFeed: [Camera Kit Rewrite](<https://devfeed.tech/articles/camera-kit-rewrite-19238.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/camerakit-rewrite/>)

Author: Shai Almog

Published: 2019-04-29T00:00:00Z

Content type: article

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [camera](<https://devfeed.tech/tags/camera.md>), [camera2](<https://devfeed.tech/tags/camera2.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [library](<https://devfeed.tech/tags/library.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The article describes a rewrite of Codename One's low-level camera support. After compatibility and stability problems with Android Camera Kit, the implementation moved to Golden Eye while retaining the existing cn1lib name. The library also gained partial support for the JavaScript port and web applications, with a mostly unchanged API.

### Source excerpt

The native low level camera API on Android is a disaster. It's often cited as one of the worst API's on Android. To make matters worse there are two separate API's Camera and Camera2 (yes really). You need to use Camera2 where it's available but that means no support for older devices. To solve this we picked the Android Camera Kit library when we started building our low level camera support. This proved to be a mistake.

## Five tips to get your code base in shape

DevFeed: [Five tips to get your code base in shape](<https://devfeed.tech/articles/five-tips-to-get-your-code-base-in-shape-28676.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2019/02/20/tacklelegacy/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2019-02-20T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [Development](<https://devfeed.tech/topics/development.md>), [test](<https://devfeed.tech/topics/test.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [refactor](<https://devfeed.tech/tags/refactor.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [test](<https://devfeed.tech/tags/test.md>), [tips](<https://devfeed.tech/tags/tips.md>)

### AI overview

This tutorial offers five tips for improving a legacy codebase. It advises against rewriting everything, emphasizes frequent releases and testing, and discusses the risks of complexity, insufficient testing, bugs, and delayed user value.

### Source excerpt

Are you living the dream? Is your code so clean it makes your eyes just tear a little? Can't think of anything you would still like to refactor?

## Understanding Fragment Transactions and Back Navigation

DevFeed: [Understanding Fragment Transactions and Back Navigation](<https://devfeed.tech/articles/the-curious-case-of-haunting-fragments-28663.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2017/12/18/fragmentback/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2017-12-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Transactions](<https://devfeed.tech/topics/transactions.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [App](<https://devfeed.tech/topics/app.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [events](<https://devfeed.tech/tags/events.md>), [fragment](<https://devfeed.tech/tags/fragment.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [login](<https://devfeed.tech/tags/login.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [screen](<https://devfeed.tech/tags/screen.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

This tutorial investigates unexpected Android Fragment behavior when login-related Fragment transactions interact with back navigation. It explains that the transaction manager saves executed transactions rather than the Fragments themselves, which can leave multiple Fragments visible after navigating back.

### Source excerpt

Do Fragment transactions and back navigation have no more secrets for you? Well then you should try to solve the mystery in this post, where a Fragment (literally) came to haunt us...

## How we got rid of 5k lines of our bash release process

DevFeed: [How we got rid of 5k lines of our bash release process](<https://devfeed.tech/articles/how-we-got-rid-of-5k-lines-of-our-bash-release-process-27954.md>)

Original publisher: [Read original article](<https://tech.trivago.com/post/2017-10-16-boerewors/>)

Author: Olaf Gladis Follow

Published: 2017-10-16T00:00:00Z

Content type: article

Language: en

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

Topics: [releases](<https://devfeed.tech/topics/releases.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Development](<https://devfeed.tech/topics/development.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [development](<https://devfeed.tech/tags/development.md>), [devops](<https://devfeed.tech/tags/devops.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [load-balancer](<https://devfeed.tech/tags/load-balancer.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [redis](<https://devfeed.tech/tags/redis.md>), [release](<https://devfeed.tech/tags/release.md>), [release-engineering](<https://devfeed.tech/tags/release-engineering.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

A trivago engineer describes replacing a fragile Bash-based release process. The article covers OPcache warmup failures, manual server recovery, and the legacy deployment tool's maintenance, validation, coupling, and testing problems.

### Source excerpt

When I joined trivago a year ago we had problems with our releases. Read how we were able to switch from our bash release process to a new one.

## Knowing when to delete code

DevFeed: [Knowing when to delete code](<https://devfeed.tech/articles/knowing-when-to-delete-code-21614.md>)

Original publisher: [Read original article](<http://miqu.me/blog/2016/08/16/knowing-when-to-delete-code/>)

Author: Miguel Angel Quiñones

Published: 2016-08-16T20:04:04Z

Content type: opinion

Language: en

Sources: [Miguel Quinones](<https://devfeed.tech/sources/miguel-quinones.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Development](<https://devfeed.tech/topics/development.md>), [Application Development](<https://devfeed.tech/topics/application-development.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [refactor](<https://devfeed.tech/tags/refactor.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [regression](<https://devfeed.tech/tags/regression.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

An opinion article about deciding when to delete code in long-term projects. It discusses short-lived application code, how evolving products can make code legacy, and the trade-off between refactoring and rewriting, favoring small refactorings over large rewrites.

### Source excerpt

Much of the literature and writing related to sofware development focuses on the creation, new ideas, fresh ideas and things to improve in your next project. But when is it a good moment to delete the old stuff in an long term project? Here's my short rant about this; I recently deleted a chunk of code in my current project and just felt I wanted to write my thoughts. Short-lived code Working on application development field, it is very normal that some code is very short lived. If you're looking to build systems and generic components then you're generally out of luck. Most Application code is generally short lived. In my opinion we just need to know how to deal with it. Products evolve, ideas and markets change, and the code implementing those concepts has to change to reflect the direction of an application. If your code doesn't closely relate or express the domain of your application, you're bound to have design problems, miscomunication and likely many bugs. Application code is very likely to become legacy in a very short time. That time might be even less than 1 or 2 years. Legacy code There isn't consensus on what makes code reach the dreaded legacy status. The definition has changed since it's first introduction, and nowadays we generally consider legacy the code that we didn't write. See the wikipedia entry: ...source code inherited from someone else and source code inherited from an older version of the software Or another definition: Michael Feathers introduced a definition of legacy code as code without tests, which reflects the perspective of legacy code being difficult to work with in part due to a lack of automated regression tests Many programmers generally call legacy code anything that they didn't write. While this is a very harsh treament of somebody's effort and time, it will mean that your code will become legacy in very short time as well. Refactoring vs Rewriting Legacy code is often mentioned when refactoring. The effort of writing some piece o

## 7th European Lisp Symposium

DevFeed: [7th European Lisp Symposium](<https://devfeed.tech/articles/7th-european-lisp-symposium-34624.md>)

Original publisher: [Read original article](<https://tapoueh.org/conf/7th-european-lisp-symposium/>)

Published: 2014-05-04T22:00:00Z

Content type: opinion

Language: en

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

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Python](<https://devfeed.tech/topics/python.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [language](<https://devfeed.tech/tags/language.md>), [lightning](<https://devfeed.tech/tags/lightning.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [modern](<https://devfeed.tech/tags/modern.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [switching](<https://devfeed.tech/tags/switching.md>), [talk](<https://devfeed.tech/tags/talk.md>)

### AI overview

A lightning talk at the 7th European Lisp Symposium discusses rewriting pgloader from Python in Common Lisp. The stated motivation was wanting a modern programming language.

### Source excerpt

A lightning talk about pgloader and why I chose to rewrite it enterily, switching from Python to Common Lisp. TL;DR -- I wanted a Modern Programming Language.

## Nginx - przydatne rewrite'y i różne sztuczki

DevFeed: [Nginx - przydatne rewrite'y i różne sztuczki](<https://devfeed.tech/articles/nginx-przydatne-rewrite-y-i-rozne-sztuczki-27576.md>)

Original publisher: [Read original article](<https://gagor.pro/2013/09/nginx-przydatne-rewritey-i-rozne-sztuczki/>)

Author: Tom

Published: 2013-09-09T00:00:00Z

Content type: tutorial

Language: pl

Sources: [Tomasz Gągor](<https://devfeed.tech/sources/tomasz-gagor.md>)

Topics: [nginx](<https://devfeed.tech/topics/nginx.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [http](<https://devfeed.tech/tags/http.md>), [linux](<https://devfeed.tech/tags/linux.md>), [nginx](<https://devfeed.tech/tags/nginx.md>), [request](<https://devfeed.tech/tags/request.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

A Polish tutorial collecting practical Nginx rewrite and redirect configurations. It explains how query-string handling works, why a trailing question mark can prevent duplicated parameters, how to optimize rewrite rules, and how to redirect domains with HTTP 301 responses.

### Source excerpt

Polubiłem Nginx'a i wykorzystuję go na coraz więcej sposobów. Kilka rzeczy udało mi się całkiem fajnie w nim skonfigurować i postanowiłem zebrać te przykłady by następnym razem gdy postanowię do nich sięgnąć nie musieć wertować konfigów po serwerach 😃 Słowo wstępu Niektóre rewrite'y kończą się znakiem ? - czemu? Otóż Nginx próbuje automatycznie dodawać parametry na końcu przepisanego adresu. Jeśli jednak wykorzystamy zmienną $request_uri to ona sama w sobie zawiera już parametry zapytania (czyli to co w URI znajduje się po znaku ?) i właśnie dodanie pytajnika tuż za tą zmienną powoduje że argumenty nie są dublowane.

## Raking Podspecs

DevFeed: [Raking Podspecs](<https://devfeed.tech/articles/raking-podspecs-25380.md>)

Original publisher: [Read original article](<https://smileykeith.com/2013/01/04/raking-podspecs/>)

Author: Keith Smiley

Published: 2013-01-04T19:09:00Z

Content type: article

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [rubygems](<https://devfeed.tech/topics/rubygems.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [pull-requests](<https://devfeed.tech/topics/pull-requests.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [lint](<https://devfeed.tech/tags/lint.md>), [objective-c](<https://devfeed.tech/tags/objective-c.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [repo](<https://devfeed.tech/tags/repo.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [rubygems](<https://devfeed.tech/tags/rubygems.md>), [tool](<https://devfeed.tech/tags/tool.md>), [tools](<https://devfeed.tech/tags/tools.md>), [travis](<https://devfeed.tech/tags/travis.md>)

### AI overview

The article describes automating CocoaPods podspec linting across multiple Ruby versions with rbenv and a Rakefile.

### Source excerpt

I spend a decent amount of time these days helping maintain the CocoaPods specs repo by managing pull requests and issues. CococaPods is an awesome dependency manager similar to Rubygems for Objective-C projects. Unfortunately a lot of submitted podspecs haven't been correctly formatted or they're missing required information. CocoaPods has an awesome build in command pod spec lint that allows you to make sure the spec is valid and complete. Understandably people who are new to CocoaPods trying to submit their libraries are unaware of this awesome tool. Therefore when I look through the pull requests, I like to lint them myself (CocoaPods does utilize Travis but unfortunately it can't do everything). Since CocoaPods supports multiple versions of Ruby (1.8.7 and 1.9.3) to be complete ideally you'd lint them on both versions. Tools like RVM and rbenv(my tool of choice) make it easy to quickly switch between different versions of Ruby using .rvmrc and .rbenv-version respectively. As you can probably assume I wanted to automate this. So I wrote a quick Rakefile to do this for me. #!/usr/bin/env rake # NOTE: Must be using rbenv 4.0 to use `system` and `.ruby-version` ## Set your preferred ruby versions $V18 = 'system' $V19 = '1.9.3-p385' $RBENV = '.ruby-version' # The gem to use $GEM = 'cocoapods' task :default => :lint task :c => :clean desc "Lint podspecs on multiple versions of ruby with rbenv" task :lint do if Dir.glob('*.podspec').count < 1 puts "No podspecs in #{ Dir.pwd }" exit end existed = versionFileExists? if existed old_version = currentVersion end # Loop through all podspecs Dir.glob('*.podspec').each do |file| # Loop through ruby versions 2.times do |x| version = x == 0 ? $V18 : $V19 writeVersion(version) puts "Linting #{ file } on Ruby version #{ currentVersion }" puts lint(file) end end # If the dotfile already existed rewrite the original code if existed writeVersion(old_version) else File.delete($RBENV) if versionFileExists? end end desc "Delete all pod

## mod\_rewrite - wymuszenie małych liter w adresie URL

DevFeed: [mod\_rewrite - wymuszenie małych liter w adresie URL](<https://devfeed.tech/articles/mod-rewrite-wymuszenie-ma-ych-liter-w-adresie-url-27540.md>)

Original publisher: [Read original article](<https://gagor.pro/2012/09/mod_rewrite-wymuszenie-malych-liter-w-adresie-url/>)

Author: Tom

Published: 2012-09-25T00:00:00Z

Content type: tutorial

Language: pl

Sources: [Tomasz Gągor](<https://devfeed.tech/sources/tomasz-gagor.md>)

Topics: [Mod\_rewrite](<https://devfeed.tech/topics/mod-rewrite.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [linux](<https://devfeed.tech/tags/linux.md>), [mod-rewrite](<https://devfeed.tech/tags/mod-rewrite.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>)

### AI overview

The article explains how to use Apache mod_rewrite to force lowercase URLs. It describes why case differences can cause requests to map to nonexistent directories and presents a tolower map with redirection for URLs containing uppercase letters.

### Source excerpt

Co prawda adresy URL pozwalają na stosowanie zarówno dużych jak i małych liter ale różne systemy mogą je różnie obsługiwać i może się trafić sytuacja, w której nie zechcemy by np. duże litery w ogóle pojawiały się w adresach URL. Doskonały przykład to mój niedawny wpis: Apache: ograniczenie dostępu dla zalogowanych użytkowników z mod_rewrite i mod_auth_basic . Zachodzi tam sytuacja, w której katalog użytkownika jest jego loginem małymi literami (bądź dużymi - jak kto woli), a użytkownik wpisując login może użyć zarówno małych jak i dużych liter i tutaj zaczyna się jazda. Można użyć modyfikatora NC (no case), ale to wpłynie tylko na porównania - przepisanie ścieżki na nazwę podaną przez usera (z dużymi i małymi literami) przekieruje do katalogu, którego nie ma (bo jest katalog tylko małymi/dużymi).

## Apache: ograniczenie dostępu dla zalogowanych użytkowników z mod\_rewrite i mod\_auth\_basic

DevFeed: [Apache: ograniczenie dostępu dla zalogowanych użytkowników z mod\_rewrite i mod\_auth\_basic](<https://devfeed.tech/articles/apache-ograniczenie-dostepu-dla-zalogowanych-uzytkownikow-z-mod-rewrite-i-mod-auth-basic-27535.md>)

Original publisher: [Read original article](<https://gagor.pro/2012/09/apache-ograniczenie-dostepu-dla-zalogowanych-uzytkownikow-z-mod_rewrite-i-mod_auth_basic/>)

Author: Tom

Published: 2012-09-09T00:00:00Z

Content type: tutorial

Language: pl

Sources: [Tomasz Gągor](<https://devfeed.tech/sources/tomasz-gagor.md>)

Topics: [Mod\_rewrite](<https://devfeed.tech/topics/mod-rewrite.md>), [.NET Framework](<https://devfeed.tech/topics/net-framework.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [auth](<https://devfeed.tech/tags/auth.md>), [debian](<https://devfeed.tech/tags/debian.md>), [linux](<https://devfeed.tech/tags/linux.md>), [login](<https://devfeed.tech/tags/login.md>), [mod-rewrite](<https://devfeed.tech/tags/mod-rewrite.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [security](<https://devfeed.tech/tags/security.md>), [user](<https://devfeed.tech/tags/user.md>)

### AI overview

This Polish tutorial explains how to use Apache mod_rewrite with mod_auth_basic to redirect authenticated users to directories named after their logins and prevent access to other users' directories. It describes comparing the URI login with the REMOTE_USER value using RewriteRule and RewriteCond backreferences.

### Source excerpt

Niedawno trafiłem na ciekawy problem w mod_rewrite - by przekierowywać użytkowników logujących się jednym z modułów mod_auth_basic do dedykowanych im katalogów, równocześnie blokując dostęp do katalogów innych użytkowników. Nie brzmi to jakoś strasznie ale problem okazał się być całkiem nietrywialnym. Teoretyczne rozwiązanie sprowadzało się do wyszukania loginu użytkownika ze ścieżki URI i porównania z nazwą użytkownika ze zmiennej %{REMOTE_USER} - jeśli wartości się różnią to Forbidden. Ale szybko okazało się że w RewriteCond zmienne z dopasowań można podstawiać tylko w pierwszym parametrze i że o ile można RewriteCond'y połączyć wyrażeniami logicznymi typu AND/OR to nie ma możliwości porównania czy dopasowania z kolejnych RewriteCond'ów są identyczne. Po kilku dniach szperania w dokumentacji i różnych tutorialach udało mi się trafić na jedną wartościową wskazówkę ale tej stronki już nie ma, więc opiszę problem dla potomnych.

[Next page](<https://devfeed.tech/tags/rewrite.md?cursor=WyIyMDEyLTA5LTA5VDAwOjAwOjAwKzAwOjAwIiwgIjU3MWQ0NmM0LWQyNDgtNDQ2NC1iMGU1LTFiZWIzMGEyZGU3MyJd>)