Comments (8)
A related ticket: #3
One of the things between backup and version control systems is a diff tool which might be an interesting project on its own.
If the term isn't deemed too hyped up (and as such distract from the actual substance), the chapter could also touch upon the connection to and parallels with blockchain technologies
The beauty of the Merkle tree. I think pattern recognition is a great takeaway from teaching materials. I would suggest having the blockchain as an extra task: โyou know how git works, now implement a simple blockchainโ. This way it's a high chance the pattern will settle as it demands creativity and contains the eureka effect.
from book-of-examples.
๐ thank you - I'll mark this one down as yours. Can you please create a sub-directory under the project root called "diff" and put your work there along with an index.md
file with point-form notes as you go along?
from book-of-examples.
I think a diff tool would be a more natural extension to the file backup tool than blockchain - I don't know of any uses of the latter in software development. (One of the themes in the earlier books has been to focus on tools that programmers use for programming.) If you did decide to go with diff, showing how to diff trees (e.g., semantic diff for HTML and SVG) as well as line-oriented diff would be really cool.
Note: tagging as duplicate until the overlap with #3 is resolved.
from book-of-examples.
@gvwilson, indeed Blockchain technology is used as a decentralised database in the fintech sector, but isn't as widespread as version control is.
I'd like to double-check if my understanding has been correct - in your opinion a semantic diff-tool topic would be a better companion to the file backup topic, rather than a chapter on version control? Would a minimalistic version control system, featuring a semantic diff tool be considered as a sufficiently non-overlapping topic?
Thanks!
from book-of-examples.
@hristog I could be misunderstanding (please correct me if I am) but if one chapter shows how to use hashes to record unique files plus manifests to record "commits", that's a full hour (see https://third-bit.com/sdxjs/file-backup/ and https://third-bit.com/sdxpy/archive/). Looking at http://gitlet.maryrosecook.com/ and https://shop.jcoglan.com/building-git/, the jump from that to something that supports branching and merging is quite large; is there a subset that you think would fit in our teachable-in-an-hour limit? If so, what features would it include beyond "I can tell which files were backed up at the same time"?
Regarding the diff tool (line-oriented or semantic), I think that's a chapter in itself: I don't know what Git uses for calculating diffs, but the algorithms in Python's difflib
are complex enough to take an hour to explore.
So now that I've written this, yes, I think I was misunderstanding - my apologies for that. If there's an extension to file backup that will show readers a bit more about how hash-based version control systems work and will fit in an hour, that would be great; separately, I think there's scope for a chapter on diffing, because it will also take an hour, and I think it might be a prerequisite for the mini-version control system (because I don't know how you'd manage merging without diff, but maybe?).
Cheers - Greg
from book-of-examples.
Hi @gvwilson,
Thank you for clarifying! I believe now my understanding is substantially better (also thanks to your confirmation on the "machine learning from first principles" proposal in #24), and I'll seek to explore both of the proposed directions and will eventually move forward with the proof-of-concept which meets the requirements more closely.
I'll also make sure to update this issue with further information accordingly.
Thank you for your time!
from book-of-examples.
A brief update - based on my local prototypes, indeed a diff tool chapter would fit much better than a minimalistic yet rushed (due to the associated time constraint of an hour) attempt at presenting a meaningful subset of a version control system.
As you've nicely indicated, the narrative would flow quite naturally from the concept of backups through a diff tool chapter. The latter itself could provide as a deliverable an actual tool which could be readily plugged into git
and used as a custom diff tool via, e.g.:
git difftool --extcmd=roc-diff ...
or
git difftool --tool=roc-diff ...
with a tiny bit of configuration, required in the latter case (and the configuration itself would optionally also enable for the tool to be able to be set to be the default git diff
tool).
Further, the chapter might conclude with a "Where to go from here?" kind of a section, which could discuss possible directions for improvements and also touch upon the concept of a three-way merge, which - as one of the fundamental constituting modules of a version-control system - is based directly on the very diff tool that is the main protagonist of this chapter.
from book-of-examples.
Yes, shall do - thanks!
from book-of-examples.
Related Issues (20)
- infrastructure proposal: create a blog for this book HOT 4
- topic proposal: discrete event simulator HOT 5
- topic: continuous integration HOT 2
- topic proposal: machine learning from first principles HOT 2
- topic proposal: property-based testing framework HOT 3
- topic proposal: a parser with useful error messages
- topic proposal: pseudorandom number generators HOT 1
- topic: regex pattern matching HOT 1
- topic proposal: Redis-like key value store with write-ahead log HOT 7
- topic: JSON ADT and codecs HOT 5
- topic proposal: Parser combinator library HOT 5
- proposal: Prohibit external packages HOT 9
- topic: compression
- proposal: use Jekyll/GitHub Pages _temporarily_ to build a website for this material HOT 2
- Topic proposal: A transpiler to JavaScript HOT 3
- meeting 2024-04-10 HOT 1
- discuss: how to manage inter-chapter dependencies? HOT 1
- topic: package manager
- topic: pretty-printing library HOT 2
- add link to rendered site
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from book-of-examples.