Configure some stuff before you can get started:
# which name do you want to see in your commits? git config --global user.name "Martin Scharm" # which email do you want to use git config --global user.email martin@dev # tell git which gpg key to use by default git config --global user.signingkey E81BC3078D2DD9BD # always push all branches and all tags git config --global --add remote.origin.push '+refs/heads/*:refs/heads/*' git config --global --add remote.origin.push '+refs/tags/*:refs/tags/*'
Global aliases are stored in
I’m using the following aliases:
# beautify the log: list actions of last 14 days in a tree like view git config --global alias.lg "log --all --pretty=format:'%x09%C(bold blue)%an%Creset%x09%Cred%h%Creset %Cgreen%ad%Creset%x09%s%d' --graph --date=short --since='14 days ago'" # search for a particular thing in the history git config --global alias.search "log --all --pretty=format:'%x09%C(bold blue)%an%Creset%x09%Cred%h%Creset %Cgreen%ad%Creset%x09%s%d' --graph --date=short -m -i -G" # shortcut for the status git config --global alias.s "status -s" # shortcut for commiting git config --global alias.c "commit -a" # shortcut for checkout git config --global alias.co "checkout" # shortcut for checkout git config --global alias.co "checkout" # shortcut for pulling and pushing git config --global alias.d "pull origin --all --tags" git config --global alias.u "push origin --all --tags" # diff two commits using meld git config --global alias.meld "difftool -d -t meld" # show ignored files git config --global alias.i "clean -ndX"
Jump around the git tree
HEADalways points to you current position in the tree.
- You can always checkout old commits or branches using
git checkout XXX, with
XXXbeing a commit hash or a branch name
- Branch names are pointers to commits. If you’ve checked out a branch and do a commit the branch pointer will move on to your new commit.
- You can address commits relatively using
^(go one up in tree) and
Xup in tree), eg.
git checkout master~2 Makefilecheckout the file
Makefilefrom the second last commit before
git checkout master^^get the third last commit on branch master
Move a branch
If you want the branch
mybranch to point to
target you just need to call the following command:
git branch -f mybranch target
mybranch to point to
target may be a commit hash or a branch name (any ref git can resolve into a commit).
Track down a bug using cherry-pick
Let’s assume you have a history such as
master: init -> c1 -> ... -> c6
and you discovered a bug in commit
c6, you would probably intruduce a lot of
prinlns/etc to detect the bug. Afterwars you need to get rid of all these debugging things and commit just the fix.
But it’s ways easier using cherry-pick. Just create a
bugfix branch. Do all your debugging stuff in there, find the bug and do another commit (commits
db3). Finally, fix the bug and commit it with
master: init -> c1 -> ... -> c6 \ \ bugfix*: db1 -> db2 -> db3 -> db4 ^add echo/println ^bug fixed
You can then simply checkout the master and use
cherry-pick to append the commit
db4 to it, which fixes the bug in the master branch without all the debugging stuff.
cherry-pick will apply commits from anywhere in the tree onto
HEAD (as long as that commit isn’t an ancestor of
Here are the git commands:
git checkout master git cherry-pick db4
And your final graph would look like:
master*: init -> c1 -> ... -> c6 ------------------------> db4' \ / \ / bugfix: db1 -> db2 -> db3 -> db4 ^add echo/println ^bug fixed
Of course, your commit hashes are a bit more complex than
db4, but I hope you got the idea :)
Modifying an old commit
Let’s assume you have a history such as
master: c4 -> c5 -> c6
and you forgot to do something in
c5. Then you can reorder the last two commits using
git rebase -i HEAD^^ --aboveAll to receive the following:
master: c4 -> c6 -> c5
now change the last commit using
git commit --amend and you’ll end up with:
master: c4 -> c6 -> c5' \ \ c5
Finally, just reorder the last two commits using
git rebase -i HEAD^^ --aboveAll:
master: c4 -> c5' -> c6
You can achieve the same with less reordering using git’s
cherry-pick. Just checkout the commit
c to modify and modify it to
--amend). Afterwards, you can
cherry-pick all commits that came after
As you can see, I left WordPress and moved to jekyll! Even if I really like the name, discarding WordPress was on my schedule for quite some time.
The main reasons for leaving WordPress:
- I do not like software that calls home without asking me. Sure, it’s convenient for some people, but I hate such a behavior. And it makes me skeptic. No idea what is transferred exactly, but I’m almost sure they have my mail address..
There are some more reasons, but those two were sufficient to make me move.
Where to go?
Recently, Micha pointed me to jekyll. Jekyll is a software to generate websites. You can simply write your stuff using MarkDown and jekyll will build your page. Jekyll is really very simple. The generated page is static. And Jekyll is blog-aware.
I of course had a look at some other static-page-generators, but jekyll indeed seems to be the most convenient (and maybe sophisticated?) software.
Basically, building a jekyll blog is dead easy.
You need to have
ruby-dev installed, the just call:
gem install jekyll
Not you can create a new website using
jekyll new my-site
A bit trickier than installing: You need to think.. ;-)
Posts go to
_posts and should always be named
YYYY-MM-DD-identifier.md. They always have a preamble (so-called front matter) which looks like:
layout: post title: Your title goes here.
But that’s it. Now you can start writing. Read more about posting.
Pages just live in the root of your jekyll instance. They will just be copy-translated. Thus, if you create a file
about.html in the root jekyll will just translate included markdown and then copies it to
Yes, of course, I didn’t want to start from scratch. So I was looking for tools to convert my WordPress stuff to markdown for jekyll. That was more or less successfull. There are tons of approaches. But non of them really met my needs. So I decided to extend on of those and forked a php-based wordpress-to-jekyll converted from davidwinter.
After a few commits the converter now exports posts, pages, and comments. It also distinguishes between published and draft. And downloads the attachments. Just give it a try and tell me if you experience any trouble.
You’re right. Comments on a static page is a bit contradictory. But not impossible.. ;-)
I saw some blogs using the crap of Disqus and Facebook and stuff. Not my world, obviously..
But there is also a static comment pluglin for jekyll. I forked it to implement my changes. I do not need the PHP stuff, to submit a comment for my blog you can use one of the following three options. I will then decide whether I’m going to include the comment in my blog. I guess that is the ultimate way to fight Spam..
Submit a comment
- Send me an email with your comment. Do not forget to mention the article you want to comment. And optionally include a website and a name to sign the comment.
- I am maintaining a feedback site. It is meant to receive feedback in general, for presentations, for my work, code, for the coffee that I serve to guests. Stuff, precisely. It is also available through the TOR network, so you can make sure you’re really anonymously. You can use this website to also create comments. Every page contains a link submit a comment through the feedback page, which brings you to that page. Just make sure to mention the article, and if you want me to give you the credits also add include your name and a mail address; and optionally a website.
- You can simply fork the blog’s repository and create a comment yourself in the
_commentsdirectory. Just have a look at the other comments. Send me a pull request and I’ll have a look at it :)
Converting images from WordPress was a bit trickier. There they use code similar to this:
_includes/image.html (see GitHub) creates something that’s similar to the caption environment of WordPress. Some more CSS and everything worked like a charm! :)
I think that’s it for the moment. Moving to jekyll was not that difficult. And I now have a static website that’s hopefully changing from time to time…
The aircrack tool unfortunately does not have a suspend or pause mechanism, thus as soon as you stop it you need to start again from the very beginning. Of course, you may manually adjust the dictionary, but that’s tedious and “error prone”.. ;-)
Lucky us, there is john the ripper to give us a hand. John knows about sessions. Just start a run which prints the words in the dictionary one after the other:
john --session=somename --stdout --wordlist=dictionary
Stop the run at any point in time using e.g.
Ctrl+c and john will store the information about the session. Just return the session with
and john will continue from where it was stopped.
To make aircrack read the words from stdin use
-w -. A typical run might look like
# start john john --session=somename --stdout --wordlist=dictionary | aircrack-ng -w - handshake.cap -b 01:12:23:34:45:56 # kill the run ^C # restart from where is was stopped john --restore=somename | aircrack-ng -w - handshake.cap -b 01:12:23:34:45:56
I wanted to install the Effing Package Management:
Especially line 35 drove me insane: You have to install development tools first. That made me think I need to install more *-dev stuff.
Took me some time to find out that there was a problem with gcc! Turns out that
gcc version 4.8.3 (Debian 4.8.3-13) (gcc -v) wasn’t able to build the package for me. So I installed
gcc version 4.9.1 (Debian 4.9.1-19) and everything worked like a charm. :)
Just discovered a nice way to take screenshots of web sites from the command line! No browser needed. Cool.
The tool I’d like to advertise is called
For instance. To take generate an image of my website just call:
Just take a look at
binfalse.png to examine the result. I obtained a
1024x6334 image. I guess the main use case is to generate some kind of preview/thumbnail. To get a thumbnail simply add
Afaik, there is no option to generate a larger thumb, but you could just pass
--width= without the
--mode=thumbnail . And then crop the pic yourself (e.g. using imagemagick). However, you need to run X and you need to have GTK, if I understand correctly. Nevertheless, I like that solution.