Civil Rights
Movements, leaders, victories and the continuing fight for equality.
Explore the people, places, events, achievements, struggles and stories that shaped our journey.
Movements, leaders, victories and the continuing fight for equality.
Innovation, patents, science, technology and world-changing contributions.
Pioneers, champions, Negro Leagues, records, activism and excellence.
Meet the people whose lives, choices and achievements shaped the journey.
Black towns, communities, institutions and places where history happened.
Moments that changed communities, movements, institutions and the nation.
In August 1908, a white mob attacked Springfield, Illinois’s Black community, destroying homes and businesses and lynching two Black men. National outrage over the violence helped spur the movement that created the NAACP the following year.
MORE →Reflects the personal views, recollections, and perspective of the author, Mike Davis.
This is a personal recollection on the Move fire on May 13, 1985
This article may contain original research. (May 2025) |
| Deflate | |
|---|---|
| Developed by | Phil Katz, PKWare |
| Initial release | 21 August 1990 |
| Compression | LZ77, Huffman coding |
| Standard | RFC 1951 |
| Open format? | Yes |
| Free format? | Yes |
| Website | pkware.com Archived 24 December 1996 at the Wayback Machine |
In computing, Deflate (stylized as DEFLATE) is a lossless data compression algorithm[a] that uses a combination of LZ77 and Huffman coding. It was designed by Phil Katz, for version 2 of his PKZIP archiving tool. Deflate was later specified in Request for Comments (RFC) 1951 (1996).[2]
Katz also designed the original algorithm used to construct Deflate streams. This algorithm received software patent U.S. patent 5,051,745, assigned to PKWare, Inc.[3][4] As stated in the RFC document, an algorithm producing Deflate files was widely thought to be implementable in a manner not covered by patents.[2] This led to its widespread use; for example, in the zlib data format, gzip file format, Portable Network Graphics (PNG) image file, and the ZIP file format for which Katz originally designed it. The patent has since expired.
Deflate compression takes any sequence of bytes and outputs a sequence of blocks (commonly called Deflate stream). Deflate decompression takes a sequence of blocks and outputs the original sequence of bytes.
Endianness is little-endian. Bit 0 is the least significant bit in a byte.[5]
Each block has a 3-bit header with two fields:[6]
1 if this is the last block in the sequence, else 0.00: No compression (sometimes called stored). Any bits up to the next byte boundary are ignored. The rest of the block consists of 16-bit LEN, 16-bit NLEN (one's complement of LEN), and LEN bytes of uncompressed data, i.e. up to 65,535 (216 − 1) bytes. Useful for incompressible data (e.g. high-entropy, random, or already compressed), adding minimal overhead (i.e. ~5 bytes per block).01: A static Huffman compressed block, using a pre-agreed Huffman tree defined in the RFC.10: A dynamic Huffman compressed block, complete with the Huffman table supplied.11: Reserved (error).Most compressible data will end up being encoded using method 10, the dynamic Huffman encoding, which produces an optimized Huffman tree customized for each block of data individually. Instructions to generate the necessary Huffman tree immediately follow the block header. The static Huffman option is used for short messages, where the fixed saving gained by omitting the tree outweighs the percentage compression loss due to using a non-optimal (thus, not technically Huffman) code.
Compression is achieved through two steps:
Within compressed blocks, if a duplicate series of bytes is spotted (a repeated string), then a back-reference is inserted, linking to the prior location of that identical string instead. An encoded match to an earlier string consists of an 8-bit length (3–258 bytes) and a 15-bit distance (1–32,768 bytes) to the start of the duplicate. Relative back-references can be made across any number of blocks, as long as the distance appears within the last 32 KiB of uncompressed data decoded (termed the sliding window).
If the distance is less than the length, the duplicate overlaps itself, indicating repetition. For example, a run of 10 identical bytes can be encoded as one byte, followed by a duplicate of length 9, starting with the prior byte.
Searching the preceding text for duplicate substrings is the most computationally expensive part of the Deflate algorithm, and the operation which compression level settings affect.
The second compression stage consists of replacing commonly used symbols with shorter representations and less commonly used symbols with longer representations. The method used is Huffman coding which creates an unprefixed tree of non-overlapping intervals, where the length of each sequence is inversely proportional to the logarithm of the probability of that symbol needing to be encoded. The more likely it is that a symbol has to be encoded, the shorter its bit-sequence will be.
A tree is created, containing space for 288 symbols:
A match length code will always be followed by a distance code. Based on the distance code read, further "extra" bits may be read in order to produce the final distance. The distance tree contains space for 32 symbols:
For the match distance symbols 2–29, the number of extra bits can be calculated as .
The two codes (the 288-symbol length/literal tree and the 32-symbol distance tree) are themselves encoded as canonical Huffman codes by giving the bit length of the code for each symbol. The bit lengths are themselves run-length encoded to produce as compact a representation as possible. As an alternative to including the tree representation, the "static tree" option provides standard fixed Huffman trees. The compressed size using the static trees can be computed using the same statistics (the number of times each symbol appears) as are used to generate the dynamic trees, so it is easy for a compressor to choose whichever is smaller.
During the compression stage, it is the encoder that chooses the amount of time spent looking for matching strings. The zlib/gzip reference implementation allows the user to select from a sliding scale of likely resulting compression-level vs. speed of encoding. Options range from 0 (do not attempt compression, just store uncompressed) to 9 representing the maximum capability of the reference implementation in zlib/gzip.
Other Deflate encoders have been produced, all of which will also produce a compatible bitstream capable of being decompressed by any existing Deflate decoder. Differing implementations will likely produce variations on the final encoded bit-stream produced. The focus with non-zlib versions of an encoder has normally been to produce a more efficiently compressed and smaller encoded stream.
Deflate64, specified by PKWARE, is a proprietary variant of Deflate. It's fundamentally the same algorithm. What has changed is the increase in dictionary size from 32 KB to 64 KB, an extension of the distance codes to 16 bits so that they may address a range of 64 KB, and the length code, which is extended to 16-bit, so that it may define lengths of three to 65,538 bytes.[7] This leads to Deflate64 having a longer compression time, and potentially a slightly higher compression ratio, than Deflate.[8] Several free and/or open source projects support Deflate64, such as 7-Zip,[9] while others, such as zlib, do not, because the procedure is proprietary,[10] and the performance increase over Deflate is small.[11]
Implementations of Deflate are freely available in many languages. Apps written in C typically use the zlib library (under the permissive zlib License). Apps in Borland Pascal (and compatible languages) can use paszlib. Apps in C++ can take advantage of the improved Deflate library in 7-Zip. Both Java and .NET framework offer out-of-the-box support for Deflate in their libraries (respectively, java.util.zip and System.IO.Compression). Apps in Ada can use Zip-Ada (pure) or ZLib-Ada.
AdvanceCOMP uses the higher compression ratio versions of Deflate in 7-Zip, libdeflate, and Zopfli to enable recompression of gzip, PNG, multiple-image Network Graphics (MNG) and ZIP files with the possibility of smaller file sizes than zlib is able to achieve at maximum settings.[15]
193f:0001) able to compress streams using Deflate at a rate of up to 3.0 Gbit/s (375 MB/s) for incoming uncompressed data. Accompanying the Linux kernel device driver for the AHA361-PCIX is an "ahagzip" utility and customized "mod_deflate_aha" able to use the hardware compression from Apache. The hardware is based on a Xilinx Virtex field-programmable gate array (FPGA) and four custom AHA3601 application-specific integrated circuits (ASICs). The AHA361/AHA362 boards are limited to only handling static Huffman blocks and require software to be modified to add support. The cards could not support the full Deflate specification, meaning they could only reliably decode their own output (a stream that did not contain any dynamic Huffman type 2 blocks).17b4:0011) or PCI-X cards featuring between one and six compression engines with claimed processing speeds of up to 3.6 Gbit/s (450 MB/s). A version of the cards are available with the separate brand WebEnhance specifically designed for web-serving use rather than storage area network (SAN) or backup use; a PCI Express (PCIe) revision, the MX4E is also produced.PCI-ID: 193f:0363/193f:0364) with a new hardware AHA3610 encoder chip. The new chip was designed to be capable of a sustained 2.5 Gbit/s. Using two of these chips, the AHA363-PCIe board can process Deflate at a rate of up to 5.0 Gbit/s (625 MB/s) using the two channels (two compression and two decompression). The AHA364-PCIe variant is an encode-only version of the card designed for out-going load balancers and instead has multiple register sets to allow 32 independent virtual compression channels feeding two physical compression engines. Linux, Microsoft Windows, and OpenSolaris kernel device drivers are available for both of the new cards, along with a modified zlib system library so that dynamically linked applications can automatically use the hardware support without internal modification. The AHA367-PCIe board (PCI-ID: 193f:0367) is similar to the AHA363-PCIe but uses four AHA3610 chips for a sustained compression rate of 10 Gbit/s (1250 MB/s). Unlike the AHA362-PCIX, the decompression engines on the AHA363-PCIe and AHA367-PCIe boards are fully deflate compliant.Inflate is the decoding process that takes a Deflate bitstream for decompression and correctly produces the original full-size data or file.
The normal intent with an alternative Inflate implementation is highly optimized decoding speed, or extremely predictable random-access memory (RAM) use for microcontroller embedded systems.
PCDEZIP, Bob Flanders and Michael Holmes, published in PC Magazine 1994-01-11.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
{{cite web}}: CS1 maint: bot: original URL status unknown (link)
appnote.txt, .ZIP File Format Specification Archived 2014-12-05 at the Wayback Machine; Section 10, X. Deflating – Method 8.Source: Wikipedia. Article content is retrieved live through the MediaWiki API.
In computing, Deflate (stylized as DEFLATE) is a lossless data compression algorithm that uses a combination of LZ77 and Huffman coding. It was designed by Phil Katz, for version 2 of his PKZIP archiving tool. Deflate was later specified in Request for Comments (RFC) 1951 (1996). Katz also designed the original algorithm used to construct Deflate streams. This algorithm received software patent U.S. patent 5,051,745, assigned to PKWare, Inc. As stated in the RFC document, an algorithm producing Deflate files was widely thought to be implementable in a manner not covered by patents. This led to its widespread use; for example, in the zlib data format, gzip file format, Portable Network Graphics (PNG) image file, and the ZIP file format for which Katz originally designed it. The patent has since expired.
mod_deflate is an optional module for the Apache HTTP Server, Apache v2.0 and later. It is based on Deflate lossless data compression algorithm that uses a combination of the LZ77 algorithm and Huffman coding. This module provides the DEFLATE output filter that allows output from Apache HTTP server to be compressed before being sent to the client over the network. It also provides a filter for decompressing (inflating, uncompressing) a gzip compressed response body.
The Deflategate scandal was a National Football League (NFL) controversy in the United States involving the allegation that New England Patriots quarterback Tom Brady ordered the deliberate deflation of footballs that were used in the Patriots' victory against the Indianapolis Colts during the 2014 AFC Championship Game on January 18, 2015. The controversy resulted in Brady being suspended for the first four games of the 2016 NFL season, while the Patriots were fined $1 million and forfeited two draft selections in 2016. For his alleged part in the scandal, Brady's suspension was originally to be implemented during the 2015 regular season. Brady successfully appealed the suspension in the U.S. District Court for the Southern District of New York, allowing him to resume his playing duties for the entirety of 2015. However, following the conclusion of the season, the U.S. Court of Appeals for the Second Circuit reinstated Brady's four-game suspension, which became effective for the 2016 regular season. After losing a request for a rehearing, Brady announced he would accept the suspension and missed the season's first four games. Brady was later reinstated as the Patriots' starting quarterback on October 9, 2016, versus the Cleveland Browns, concluding the events of Deflategate. The controversy remained a topic of discussion during the season, which concluded with the Patriots winning Super Bowl LI and Brady being named the Most Valuable Player (MVP) of the game. The season also saw the NFL change the procedure for monitoring football pressure, conducting air pressure spot-checks during halftime of games. In February 2022, it was revealed by sportswriter Mike Florio that the NFL deleted data from 2015 regular season football air-pressure spot-checks that showed similar deflation of balls at halftime in similar weather conditions on orders from NFL general counsel Jeff Pash.
gzip is a file format and a file compression program. The program uses the Deflate algorithm to compress and decompress a single file using the gzip file format. gzip was released in 1992 as a free software replacement for the compress program because its compression algorithm, LZW, was covered by patents from Unisys and IBM, which did not expire until 2003 and 2004. Jean-Loup Gailly designed the gzip file format, which was later specified by RFC 1952, and originally wrote the gzip program. Mark Adler wrote the decompression part. gzip is now developed by the GNU project. As the file format can be decompressed via a streaming algorithm, it is commonly used in stream-based technology such as Web protocols, data interchange and ETL (in standard pipes).
Before the 1921 destruction of Tulsa’s Greenwood District, Black residents had created a remarkable center of business and community life. The district included stores, professional offices, entertainment venues and homes owned by Black citizens. Understanding Greenwood means learning what was built—not only what was burned.
MORE →Madam C.J. Walker