All Projects → juhakivekas → Multidiff

juhakivekas / Multidiff

Licence: mit
Binary data diffing for multiple objects or streams of data

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Multidiff

Bento
Swift library for building component-based interfaces on top of UITableView and UICollectionView 🍱
Stars: ✭ 371 (+31.56%)
Mutual labels:  diff, diffing
Differencekit
💻 A fast and flexible O(n) difference algorithm framework for Swift collection.
Stars: ✭ 2,986 (+958.87%)
Mutual labels:  diff, diffing
Pgdiff
Compares the PostgreSQL schema between two databases and generates SQL statements that can be run manually against the second database to make their schemas match.
Stars: ✭ 333 (+18.09%)
Mutual labels:  diff, diffing
go-delta
go-delta - A Go package and utility to generate and apply binary delta updates.
Stars: ✭ 25 (-91.13%)
Mutual labels:  diff, diffing
Nbdime
Tools for diffing and merging of Jupyter notebooks.
Stars: ✭ 2,135 (+657.09%)
Mutual labels:  diff, diffing
Diffabledatasources
💾 A library for backporting UITableView/UICollectionViewDiffableDataSource.
Stars: ✭ 601 (+113.12%)
Mutual labels:  diff, diffing
Jsondiffpatch
Diff & patch JavaScript objects
Stars: ✭ 3,951 (+1301.06%)
Mutual labels:  diff, diffing
Sirix
SirixDB is a temporal, evolutionary database system, which uses an accumulate only approach. It keeps the full history of each resource. Every commit stores a space-efficient snapshot through structural sharing. It is log-structured and never overwrites data. SirixDB uses a novel page-level versioning approach called sliding snapshot.
Stars: ✭ 638 (+126.24%)
Mutual labels:  diff, diffing
Awesome Website Change Monitoring
A curated list of awesome tools for website diffing and change monitoring.
Stars: ✭ 224 (-20.57%)
Mutual labels:  diff, diffing
Ace Diff
A diff/merging wrapper for Ace Editor built on google-diff-match-patch
Stars: ✭ 257 (-8.87%)
Mutual labels:  diff, diffing
pg-diff
PostgreSQL schema and data comparing tool
Stars: ✭ 39 (-86.17%)
Mutual labels:  diff
treediff-rs
Extract differences between arbitrary datastructures
Stars: ✭ 52 (-81.56%)
Mutual labels:  diff
catnip
terminal audio visualizer for linux/unix/macOS/windblows*
Stars: ✭ 79 (-71.99%)
Mutual labels:  visualizer
Diff
A library for diffing golang structures
Stars: ✭ 266 (-5.67%)
Mutual labels:  diff
ecto diff
Generates a data structure describing the difference between two ecto structs
Stars: ✭ 22 (-92.2%)
Mutual labels:  diff
intersection-observer-debugger
A script you include during development that shows the root, target, and intersection every time an IntersectionObserver is triggered.
Stars: ✭ 61 (-78.37%)
Mutual labels:  visualizer
tailor
Infrastructure as Code for OpenShift
Stars: ✭ 12 (-95.74%)
Mutual labels:  diff
array-diff-multidimensional
Compare the difference between two multidimensional arrays in PHP
Stars: ✭ 60 (-78.72%)
Mutual labels:  diff
diff2HtmlCompare
Side-by-side diff shown in HTML
Stars: ✭ 103 (-63.48%)
Mutual labels:  diff
Aehnlich
Show/Merge differences in directories and their content (text files) in Light/Dark designs
Stars: ✭ 73 (-74.11%)
Mutual labels:  diff

M U L T I D I F F

Multidiff is a sensory augmentation apparatus

Its purpose is to make machine friendly data easier to understand by humans that are looking at it. Specifically multidiff helps in viewing the differences within a large set of objects by doing diffs between relevant objects and displaying them in a sensible manner. This kind of visualization is handy when looking for patterns and structure in proprietary protocols or weird file formats. The obvious use-cases are reverse engineering and binary data analysis.

multidiff -p 8000 -i json -o hexdump

At the core of multidiff is the python difflib library and multidiff wraps it in data providing mechanisms and visualization code. The visualization is the most important part of the project and everything else is just utilities to make it easier to feed data for the visualizer. At this time the tool can do basic format parsing such as hex decoding, hexdumping, and handling data as utf8 strings, as well as read from files, stdin, and sockets. Any preprocessing such as cropping, indenting, decompression, etc. will have be done by the user before the objects are provided to multidiff.

Command-line interface

The command line interface is the easiest way to use multidiff. It supports a few common use-cases and is installed by the setup script.

python3 setup.py install
multidiff -h

--mode

This selects the diffing strategy, currently sequence and baseline are supported. Sequence mode diffs every object with the object added just before it while baseline mode always diffs the most recent object with the first object.

--informat & --outformat

The infomrat argument controls what kind of transformations should be done to the data before it gets diffed. outformat controls the view of the output data. informat should mostly be selected based on what is the easiest way to provide data to multidiff while outformat should be selected based on how the content of the data is most pleasantly viewed.

--port

There is an embedded tcp socket server that will listen to any packets coming to the specified port and print the diffs as more objects are sent to it. The server supports a json mode in which objects are passed as json objects that may include metadata. This is useful if the client has done some analysis on the data and one would like to show those results in the view stream. The schema is pretty simple:

{
	"data":"[data encoded as base64]",
	"info":"some useful note"
}

Example object providers are in the examples directory. These are specific use-cases where it has been helpful to have a stream of diffs visible when inspecting traffic.

Examples

Check how much your shell history repeats:

history | multidiff -s -o utf8

Diff a bunch of files and scroll through the results:

multidiff interesting_file.bin folder_with_similar_files/ | less -r

Start a multidiff server, then send objects to it:

multidiff -p 8000
echo "interesting" | nc 127.0.0.1 8000
echo "intersectional" | nc 127.0.0.1 8000

Contributions

Pull requests are welcome, and please raise an issue if something is broken or if you can think of a cool feature. I can be reached as "stilla" on Protonmail.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].