A couple of websites have recently been setup to find x.
Elliot Kembler tries to name x the Kembler Identity which might be a little arrogant, but the idea is explained best on his site.
The MD5 Game site keeps a highscore of who is winning the search using the longest common substring. Cool idea - but of course if you are leading this scoreboard it doesn't mean you are any closer to finding x than anyone else.
So here is some Perl to help you find an input to MD5 that gives you an output with a certain (configurable) substring length:
#!/usr/bin/perl
use strict;
use warnings;
use Digest::MD5 qw(md5_hex);
use String::LCSS_XS qw(lcss);
my $start = q(dd91217c39ac3b9e54846de064d40c62);
my $last = $start;
while (1) {
my $cur = md5_hex($last);
my $long = lcss($last, $cur);
if (length($long) > 5) {
print "md5('$last') == '$cur'\n";
print "$long\n";
if ($cur eq $last) {
print "^^^^ I found it! ZOMG!!!!\n";
last;
}
}
$last = $cur;
}
See the 5 in there? Change that to a higher number when you start getting serious about finding really long, common substrings. As an example, here is the output of the above, changing the loop from while (1) to for (1..150000)
md5(dd91217c39ac3b9e54846de064d40c62) => ac3b9e54846de4358d0d460572f128fb
ac3b9e54846de
md5(df08ba8cb16042270ed7f0f4385f0d60) => ad06535b0cd9265d3727dcb1604fa4f4
cb1604
md5(6489123acf277017783b9cc5882121d0) => d052d008f277015cc2fc01f8e41e0574
f27701
md5(29d91a801c36d15f6d393fadce1ed2ce) => 3fadce5dfaf11cfbd4bd0a19838dfa31
3fadce
md5(90253bc725066b48977fc5fd287ac873) => c45ef485c3cd87ac8781698b9b6cbb3b
87ac87
md5(13ab98420d2d390220661bc27cdd01d5) => faccf5f92d098420d41c5b7bcac9f9d3
98420d
Why use dd91217c39ac3b9e54846de064d40c62 as the starting hash? Because that's the one that is currently leading the MD5 Game website (at the time of this post.) You should change it.
You will note that my Perl just uses the MD5 hash of the previous attempt as its new try. This is a novel idea. You could (should?) use a randomly generated hash or just increment your way through the whole space if you like... of course this will take up a fairly large portion of time ;-)
... To Modern Software Development is a concise list of technical points for a software house to implement. It has a basis in Agile methodologies but doesn't preach a certain one.
Modern is being proactive and efficient. It is being prepared, having backups, examining information, deploying with minimal mistakes and being able to recover and review when mistakes are made. Modern is being well-tested and writing maintainable code. Modern is being able to release regularly and easily.
Why are SCM and ticket systems separate?
e.g. Why use git or svn and then have to tie them in with RT or Jira? Couldn't there be a nice command line utility that reports on tickets and bugs too?
Instead of tying commits to bugs in external reporting systems, it would be great to issue some command in your SCM to:
... etc.
Here's a ridiculous article that attempts to espouse the benefits of counting lines of code (LOC) by comparing software development to house building: Counting lines of code can help measure progress
Development is often compared to building a house. I’ve built a house, and I can tell you that while I did want the bricklayers to be finished on time, that wasn't enough to satisfy me when I had to write the check. Generally, I’d check their progress every day, and I would notice how much brick had been laid.
What this moron and his ilk fail to understand is that software engineering is a different style of work to ... well, anything. Let's take his building example. A house, 99% of the time, is a solved problem. A builder who has worked on previous houses already knows exactly how to build the next house (unless it's a fancy architectural-type house, or it's built on sand or made entirely from glass etc.) In software development however, if a large problem has already been solved before then that module (or open source library) can be reused. Therefore new work being done by devs often (not always) fits into one of these categories:
... and this work can be equally or more important than new features written from scratch. It can also be less important - it all depends on the value of the features, not on the lines of code it takes to write them.
Both refactoring and bug-fixing can sometimes actually reduce the number of LOC in an application, because existing code is studied for any inefficiencies or errors and newer, simpler, more modular, more elegant code replaces it. If you were measuring LOC based on changed lines then this would be taken into account, but if you are measuring LOC based on new lines then this work would be ignored. Let's say we were indeed taking into account changed lines, and we have an example where 5 lines were altered and 3 lines removed to give an efficiency increase of 300%. Should these 8 line-changes be given equal weight to 100 lines of code elsewhere that only adds one small feature? You would have to compare the value of the small feature to the value of the efficiency increase!
Compare ticket values, not lines of code written.
Sometimes a bug can be so insidious that it can take a whole day to find and fix - and it might be a one-line fix. Should a developer be punished for this, just because his daily LOC measurement is low? What if the bug-fix was a show-stopper? Even our old friend William Gates thinks that would be a bad idea:
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
**Scrum** takes care of the problem by examining relative complexity values during sprint planning meetings. Once a list of tickets (items to be worked on) have complexity values you can estimate their development time and equally distribute the tickets among developers. Progress assessment is now easy, managers just need to check the burn-down charts... and that eliminates the need for misguided and archaic measurement techniques like LOC checks.
Django Python 960.gs Git Vim NetBSD Nginx
The author is a software engineer living in Australia. He sux at guitar, loves camping, doesn't like cake, does like coffee and is a lazy home brewer.
Help
Latest entries
*BSD Agile Apache Apple Athletics Beer Best-Practice Censorship Comedy Cool Crosswords Deployment Django English Exim Firefox Git Hardcore Health Interface irssi Javascript Jira Languages Linux Makefile Markdown Mathematics Mobile Broadband MySQL NetBSD nginx Nokia OSX Perl Photo Privacy Python Rant Requirements rsync Ruby Shell Slackware SQL SQLite SSH Standards Subversion Testing ThisBlog Vim VMWare (Fusion) VPN WDTEM X Yum zsh
Perldoc Output
Yum
Possum
Git's Index
Jira Project Keys
The Coffee Shop
Git GUI
It is more important...
Questioning Unix (and Other) File Times
The Frog King Photo
Rain Cloud Photo
rsync
Timezone
utf8 in your Perl
Theatre Ceiling Photo
Some problems are so complex...
Colours in your PAGER
zsh vared
zsh magic-equals and double-star
Funny Tweets
ChoppingBoard, Project365, RageQuit