[HN Gopher] Tweak: An Efficient Hex Editor
___________________________________________________________________
Tweak: An Efficient Hex Editor
Author : hprotagonist
Score : 58 points
Date : 2021-02-26 18:29 UTC (4 hours ago)
(HTM) web link (www.chiark.greenend.org.uk)
(TXT) w3m dump (www.chiark.greenend.org.uk)
| ridiculous_fish wrote:
| I am the original author of Hex Fiend. Like Tweak, Hex Fiend uses
| a BTree (actually a B+tree, which also cross-links nodes at the
| same level, for easy iteration). Each interior node is annotated
| with the amount of data contained in its subtree, so it is
| possible to quickly find data at an offset. I think this is the
| same as the author's idea.
|
| Hex Fiend has an additional trick: it can save files in-place
| without needing additional disk space. It does this by computing
| a dependency graph, and then writing chunks in topological order.
| For example, say you have a 100 byte file, and the user inserts
| 100 bytes at the beginning. We get a graph:
| [100, 200) depends on [0, 100) [0, 100) from memory (no
| dependencies)
|
| The topo sort means we'll write [100, 200) first, so its source
| data is not overwritten.
|
| Here is Hex Fiend's B+tree:
| https://github.com/HexFiend/HexFiend/blob/master/framework/s...
| lifepillar wrote:
| Thank you for making HexFiend, that's the top hex editor!
|
| One thing that I really really like about HexFiend is that
| scrolling is very fast, yet precise and smooth, no matter the
| size of the file. Is it based on custom classes? Scrolling in
| macOS used to be quite ok up to several releases ago. Then it
| became crappy, especially in some apps (AppleScript Editor
| comes to my mind).
| ridiculous_fish wrote:
| Hex Fiend uses native Mac scrollbars, but manages its scroll
| position itself. In Cocoa speak it uses NSScroller but not
| NSScrollView.
| jandrese wrote:
| Nice. I'm personally not a fan of EMACS style control codes
| everywhere, but I like the simple and straightforward interface.
| nielsbot wrote:
| For a Mac GUI app, try Hexfiend: https://hexfiend.com. (App store
| link: https://apps.apple.com/us/app/hex-fiend/id1342896380?mt=12)
| heyoni wrote:
| That thing is the best. I don't understand exactly how it
| works, but it can handle files up to any size without breaking
| a sweat.
| ttt0 wrote:
| You don't have to load the entire file to RAM, you can read
| just parts of it.
| keehun wrote:
| While chunking data, it's non-trivial to handle fast
| scrolling and populating the scrollbars with the correct
| size of what the eventual size would be.
| comex wrote:
| Non-trivial for sure. But much easier with a hex editor
| than with, say, a standard text editor. No need to guess
| how many lines some text takes up due to word wrapping;
| no need to even search for newlines. There's a fixed
| number of bytes per row, and a fixed row height, so
| mapping between byte offset, line number, and pixel
| y-position is just a matter of multiplying and dividing.
| keehun wrote:
| Agree. Nothing to argue there.
| ttt0 wrote:
| I might be wrong, but I believe the fastest way is to
| seek to the end of file and that way you can get the
| total file size. Or use like fstat or something
|
| Maybe scrolling is non trivial, but there is definitely a
| lot of room for optimizations. You could store large
| chunks in memory and populate them asynchronously with
| smaller chunks from file for example.
|
| edit: I completely missed the point with the size,
| comex's answer is way better
| shaicoleman wrote:
| Tweak misses the following things I expect in a hex editor:
|
| * No help screen to show the hotkeys
|
| * Changes aren't highlighted
|
| * Hotkeys are unintuitive unless you use Emacs (less than 5% of
| users [1])
|
| * No undo/redo
|
| * No search
|
| * No option for decimal offsets/size
|
| I've tried dozens of hex editors:
|
| * hexedit [2] is the best option for Linux, despite it being web
| based.
|
| * dhex [3] is probably the best option for the terminal, but not
| great.
|
| * HxD [4] is great if you're on Windows
|
| 1.
| https://insights.stackoverflow.com/survey/2019#development-e...
|
| 2. https://hexed.it/
|
| 3. https://www.dettus.net/dhex/
|
| 4. https://mh-nexus.de/en/hxd/
| tyingq wrote:
| Screenshot of it editing itself, in case someone wants to know
| what it looks like: https://imgur.com/a/lndAWbm
___________________________________________________________________
(page generated 2021-02-26 23:00 UTC)