pkill

December 15th, 2012

The other week I learnt a valuable lesson about pkill, namely that it will match like a greedy little bastard unless instructed not to, which may have unintended consequences…

To illustrate, consider these two images:

Vanilla pkill targeting "foo"

So what happens is I start two processes, foo and foobar (which are simple shell scripts running sleep 1h),
execute pkill foo, and both foo and foobar dies.

pkill -x targeting "foo"

Adding -x (or --exact) to the pkill command will ensure that only foo gets killed.

If you want to go overnuking everything, regular pkill will serve you well, but if you are looking for a scalpel, then -x is most definitively what you want.

:wq

2012w43

October 28th, 2012

Idiocracy

No one can have missed the outrageous idiocracy in Italy which simply left me with a single question:
If they had warned, and panic had ensued, and people had gotten killed while trying to escape, and no quake would have hit… then what?… Seems like a case of “damned if you do, damned if you don’t”…

The US is implementing a “six strikes” type of deal (similar to the ?now defunct? French HADOPI) and apparently the “independent expert” used to draft a “reasonable” law might not have been so independent as they should have… being a former RIAA lobbying firm… The corruption surrounding the copyright industry is truly sickening.

I am probably waaaay to paranoid, but this reeks of false flag operation. Gotta keep the populus scared of them terrorists now don’t we?

Shut up and play nice: How the Western world is limiting free speech.

More and more I am beginning to think that the correct course of action is to completely boycott anyone who use the DMCA since it is used as a sledgehammer instead of a scalpel. I think this comment sums it up pretty well.

Surveillance / Privacy

Outsource government and corporate surveillance to people themselves… great…

Wait! Wait! Wait! You mean to say that geo-tagging can compromise ones privacy and security?!?! Nooo, who’d have thought?

Cool stuff

A distributed twitter thingy I think it’s cool and all, really cool, but I’d still go for identi.ca.

Sleipnir is a small proxy which you run, to intercept requests and serve local files instead. Not sure when or where I’d find use for it, but interesting concept none the less.

A rather good run-through of various tools for UNIX-like systems

Jeff Atwood wrote a post about the future of Markdown, and much have since been written and people have had opinions but from one of those discussions, what I found most interesting was Pandoc.

Stuff I learned

Great answer on how to better control node placement in a graphviz diagram.
And another answer on a similar question, although this should probably be considered an ugly-hack. Then again, there’s a time and place for everything.

Last week I prodded in some Perl code, and found myself unable to visualize just what the heck the internal structure of a variable looked like, and thought to myself Had this been PHP, I would have used var_dump(); I wonder if Perl have something similar?

Of course Perl has something similar.

use Data::Dumper;
print Dumper $my_mystery_var;

Source: Perl Mongers

Race-condition-free deployment with the “symlink replacement” trick

Food for thought

Why we can’t solve big problems.

Here’s a peculiar productivity hack: Hire a person to slap you in the face.

Compliance: The boring adult at the security party.

Why we buy into ideas: how to convince others of our thoughts

2012w39

September 30th, 2012

The bad

EU is hard at work making a complete ass of itself… again… further reading

The good

California passes groundbreaking open textbook legislation :D

The unsorted thoughtful and/or cool

Pretty cool idea although probably not very useful for anything ;D

The lack of a good manual to explain both a) how it works, b) what it will actually install and where (and if it will set up services or not), c) and how I would actually operate it once installed, are the things (i.e., all results of lacking the necessary documentation for me to read up on BEFORE trying it) which keep me from even considering installing and testing prophet. Which is a real shame as it sounds like an interesting project.

Yet another nifty AWK tutorial

I just heard about Dancer, which seems to be to Perl, what Flask is to Python

:wq

2012w38

September 23rd, 2012

Patent / Copyright madness

Automated copyright enforcement really seems to work well… NOT!

And Apple is up to no good as usual…

Patent trolls trolling around, but it would seem not without a fight :)

Oh, and if you were thinking of setting up a service which required a login, and you thought you’d protect people’s accounts well, then that might be patented…

Programming

Through this reddit thread (referencing it both for source and because the comments in there are relevant) I was lead to this post sometime this week or last.

And this weekend, while doing the weekly write-up, I re-read the post, and started thinking, because I kindof feel that my own hobby projects very easily fall victim to this. They get shot down because I start thinking of how much stuff I would have to rewrite (things I’ve already solved in previous projects, but never put down the time to make generic enough to reuse) or figure out, and it just takes my edge off wanting to sit down and do it.

But then it struck me, what help me get reinvigorated, what helps me come over at least that hurdle: A moderately quiet place, time enough for a conversation, a good (programmer) friend, and optionally a beer.

Broken gets fixed. Shoddy lasts forever — I wonder, does this mean that, if something is shoddy and you want it fixed, the correct action is to break it? ;)

git

I found myself wanting a way to have a central repository react to pushes based on what branch was pushed (I am working on a script at work, which some of my colleagues are beta-testing for me).

Whilst I develop a new feature I need a way to push that potentially buggy version of the script to a path where the testers can find it, while using a completely different path for the stable version which everyone else could use without any big risk of it messing anything up.

What I ended up with was this:

#!/bin/sh

read _from _to _branchPath
_branch=`basename $_branchPath`

if [ "$_branch" == "develop" ];
then
    cd /path/to/local/repository/on/server
    unset GIT_DIR
    git pull
    git checkout develop
    cp -f ./scriptname /path/to/beta/test/directory/
fi

Two questions on Stack Overflow helped me out tremendously: This and this (and as always, pesa was a big help too)

And since I agree with this post (namely that vimdiff would be a great diff viewer for git) I went ahead and followed the instructions of that post :)

vim

Using vimwiki to track time sounds brilliant. It’s almost enticing enough for me to look into vimscripting to help out. Yet another project I’d like to spend time on :S

Being that paranoid soul I am, and now that I can also call myself a tester, I realize I’ve become even more aware of how many different entry points there are which needs to secured, such as vim’s modelines (protip: use secure modelines

From this post I learnt about license-loader, which I need to look into.

awk

I found this post to be an excellent intro to awk, I am going to spread this around whenever I need to show anyone the basics :)

Misc

This post about 52Hz made me kindof sad :/

On the other hand, this post filled me with some hope.

I think it could be beneficial if this site was more widely distributed, so here’s me doing my part.

Finally, this post was pretty cool, and I immediately thought of at least two people I know who would get a kick out of reading this. :)

:wq

2012w37

September 16th, 2012

Ten things I wish I knew earlier about the Linux command line; Ctrl-U, Ctrl-Y wasn’t exactly new to me, but not something I regularly use. Truth be told, I would probably have been more likely to just go to the beginning of the line, and add the command followed by a semicolon.

Since I started trying out dwb instead of Firefox I’ve been missing some addons. AdBlockPlus is one of those, man the web is noisy without it. But that prompted me to install prioxy, and that works wonders, and works even better since this will ensure that any program using the proxy will immediately have the full filtering enabled.

It also means that the Facebook tracking disussed here can go suck it.

I also read an interesting post about so-called sparkfiles, which I think could be interesting to try out for a while.

Who owns the copyright to class notes? Just when I thought it couldn’t get any more absurd…

Automicrofarm looks like a rather interesting startup. Potentially bad for farmers, but lessening the reliance of the rest of the society seems like a not so bad idea these days.

Finally, an old but still valid lesson: Doing something, however small, is better than doing nothing

Every great thing once started small :)

:wq

AWK hackery++

September 13th, 2012

While I cannot take credit for the solution which follows (the real star is Pontus) what I can do is document it for posterity:

The scenario is as follows: You have a couple of log files, foo.X.log for X in [1,2,..,N-1,N] and you want to watch all of these for a certain pattern, P.

And all of these matching results you want to write to a condensed log, in the format <originatingLogFile>: <lineThatMatchedPattern>

You have figured out that tail -f foo.*.log will yield you all the lines, and separate output from the various files using ==> foo.X.log <==

You might have tried with grep, to get the correct lines, and perhaps even got it to output to the file using --line-buffered but you are not out of the woods, that pesky filename at the beginning of the line is still nowhere to be seen.

grep? where we’re going, we don’t need grep

Every time that tail outputs a line from one of the other files than the last one indicated by ==> ... <== it outputs that pattern again on the line before the output.

E.g.:

$ tail -f foo.*.log
==> foo.1.log <==

==> foo.2.log <==

==> foo.3.log <==

Now, from another terminal, while the tail is still following all three of those logs, let us insert some content:

$ echo "PATTERN, some more stuff" >> foo.2.log

Which results in the first terminal now displaying:

$ tail -f foo.*.log
==> foo.1.log <==

==> foo.2.log <== 

==> foo.3.log <==

==> foo.2.log <==
PATTERN, some more stuff

Ok, so whenever new content is pushed onto any one of the tailed files, we will get notified of it, along with what file it was pushed to (note though, that if we were to push more content into the same file as was previously pushed to (foo.2.log) it would NOT generate another ==> foo.2.log <== line, it would simply append to the ongoing tail:

$ echo "PATTERN, even more stuff" >> foo.2.log

$ tail -f foo.*.log
==> foo.1.log <==

==> foo.2.log <==

==> foo.3.log <==

==> foo.2.log <==
PATTERN, some more stuff
PATTERN, even more stuff

This doesn’t matter much, our solution will adapt to this, but it is a gotcha worth noting (although it should be instantly obvious to anyone reproducing this on their own anyway)

Anyway, with that out of the way, lets get down to business: AWK hackery!

First order of business: We have a pattern we wish to match. This may or may not change at a later data, and sure, we could practice YAGNI (You Ain’t Gonna Need It) but let us prepare for it anyway by assigning the pattern to be matched in the invocation of AWK (this will assume that we have stored the pattern to be matched inside the variable “$_P”):

awk -v pattern="$_P"

Since AWK operates on lines (that is a simplification since one could redefine what constitutes a line) and it won’t remember whatever was in the line if processed in the previous iteration (previous line) we need to store the latest file(name) into which a line was added.

To achieve this we need to detect whenever new content has been added to a new file (i.e. whenever a new line consisting of ==> foo.*.log <== appears.

BEGIN { filename = "" }
/==> .* <==/ { filename = $2; next }

Since BEGIN triggers before AWK starts any processing, it is the perfect place to define our placeholder variable filename in which we are going to temporarily store the filename of the file into which data is presently being entered into.

The next line matches any line containing ==> followed by anything really, followed by <==. Upon encountering one of those lines, we store the stuff between the arrows in the filename variable.

$0 signifies the entire line, and everything inside that line, separated by newlines (start and end of line) or whitespace, is assigned a numbered variable $1 .. $x for x in number of whitespace-separated words in line. (Again, we could reconfigure AWK to not split things on whitespace, but in this case there would be no sense in doing that.)

And just to ensure that we won’t ever match the ==> .* <== line with whatever we put in $_P we tell AWK that once we have stored the filename, we should move on to the next line.

Next on the agenda is to match the pattern:

$0 ~ pattern { printf "%s: %s\n", filename, $0 }

Essentially this tells AWK to look inside $0 (the whole (current) line) for the stuff we have stored in the variable pattern (i.e. $_P) and if there is a match, print it out, first the value stored in the filename variable, then a colon and a space, followed by the entire line that matched ($0) and finally a newline.

Rinse, repeat, until we abort the command with C^c.

Now, this is not the end of the story though. We wanted to write this to a file. But AWK does not write to file until it has processed all of the input, and this will not happen since tail is following and will not end until we kill it (and in doing that we lose it all before it has a chance to be written to file). pesa points out that I got this wrong, go downwards and read his comment for the real deal

Doh!

What we need is a way to tell AWK to write directly to file directly after it has found a match and printed. fflush() is the function to make this happen for us:

$0 ~ pattern { printf "%s: %s\n", filename, $0; fflush() }

Now all we have to do is wrap the whole thing up, redirect to the filename of the condensed log we want to establish:

tail -f foo.*.log | awk -v pattern="$_P" '
    BEGIN { filename = "" }
    /==> .* <==/ { filename = $2; next }
    $0 ~ pattern { printf "%s: %s\n", filename, $0; fflush() }
' > condensedLog.log

There is one big gotcha here though:

If you are starting a tail on log files which are already populated, tail will first output everything from the first log (which is the first file to be read I suppose depends on some system settings (locales comes to mind)) and then move on to the next file, etc. So regardless of the chronological appearence of matching lines in the different files, the first files matching lines will always be presented first.

All matching lines entered AFTER this one-liner has started running, will appear in the correct chronological order.

This simply means that you will have to be prepared for this, and possibly do processing on the condensed log file as well (hopefully the logs you are tailing all have timestamps in them so that sort has something easy to operate on once the lines are entered into the condensed log)

:wq

2012w35

September 2nd, 2012

I’ll try to keep this post short, only the most significant discoveries from this week:

git add –patch

This is the biggest revelation I’ve made in quite some time.

What it will do for me is to give me a chance to select “(c)hunks” of modified code inside a file, which I want to add to the coming commit.

If I were more disciplined while programming, that shouldn’t be necessary, but I hack on a new feature, notice a typo in another part of the code, fix the typo and continue hacking.

And then, should I just do a git add <file> the commit message would either need to be “hacked on feature and fixed typo” (ugly) or… I guess I could omit mentioning the typo fix in the commit message…

But with --patch I can now split these two unrelated changes into different commits and have a clean commit history. Awesomeness ensues!

business.txt

Just like the proposal a couple of months ago about a freedom.txt (aw crap, I just remembered I haven’t done anything with that yet…) there is now a new idea, more engineered towards businesses, aptly called business.txt, and I find myself liking that idea pretty much.

:wq

2012w34

August 26th, 2012

Society

Note to self: Never give United Airlines any of my business.

Control, or lack thereof

Steve Wozniak sees trouble in the cloud (that makes two of us) and doesn’t think that the Internet should have gatekeepers or regulators.

This hacker news thread contains a quote which perfectly sums up one aspect of what I feel is wrong with SAAS: SAAS means you’re vulnerable to vendor change with every pageload.

Privacy

Sociability’s value comes from privacy An essay by Kyro Beshay, via Cory Doctorow.

It is a poor grade upon humanity that sites like this need even exist.

Olympics and corporate greed

The Olympic games this year really made capitalism show its ugliest sides:

Case in point: VISA. Did they really think that hassling non-VISA-card holders would make them any new friends?

Case in point: London Olympics committee. I am not completely unreasonable, I understand that if too many people set up their own wireless hot-spots in close proximity to the “sanctioned” hot-spots, and on the same frequencies, bad things will happen, but at the same time I can’t shake the feeling that they just wanted a monopoly on providing connectivity, and forcing people to pay through the nose for it.

Good intentions and the road to hell

I understand the benefit to first responders, if we allowed for a government-controlled “emergency switch” to open up wireless routers for mesh-use in disaster areas, many people on Twitter recommended the inhabitants of Oslo to do just that after the attack, but I see the very real potential for abuse from the same government and since they get to define what is or isn’t an emergency, and when things are in people’s and society’s best interests, I give this idea a “thumbs down”-grade.

Drawing the wrong lessons from horrific events

Abuse of power

Case in point: VISA

DHS issuing take-down notices No free speech for you!

Security

A tutorial about off-the-record messaging courtesy of monkeyiq

Albeit not being anywhere near ready for primetime, cryptosphere still looks like a really interesting project

I am unsure as to whether Burner, the service which provides temporary phone numbers, will have a net positive or negative impact on society at large (if it has any impact at all). The concept is cool, and perhaps can be useful in certain settings, while it could probably be abused in others.

And I feel much the same way about Deadman. It could probably be awesome for hiking trips and the likes, for when you really don’t want to be disturbed, but if something were to happen it would be nice if emergency services knew roughly where to look.

Schneier on Security: $200 for a Fake Security System And as one commenter said: It’s all fun and games until your cat dies of exhaustion.

Development

The Best Programming Advice I Ever Got, a rather refreshing thought, it probably would be good to make ourselves a little less dependent on tools and have that grey matter exercise some more.

A jQuery extension called labelfor to associate labels with form input elements.

I’ve written before about this game, but I keep thinking about it and always forgetting what it’s called, so just a reminder to myself.
More than that however, is that I’ve also started taking an interest in Ren’Py the framework on which don’t take it personally, babe, it just ain’t your story is built.
I think that could be used in a plethora of ways, both for entertainment, but also education, if not both at once.

The shell

A blog post about steps to take to improve the performance of shell scripts. Really nice.

SSH

SSH forced commands pretty useful stuff.

Sorting on multiple columns

One of the previous weeks I needed to sort a bunch of lines, but I had concluded that it would be way too much work to transpose the columns in the file in a way that sort would magically work.

Which meant I needed to dig into the flags sort support. I was fairly certain that what I wanted done could be done, I just had to find the way. man sort got old real quick, so I hit duckduckgo instead and found this post which gave me everything I needed, and in a nicely formatted way :)

I can’t remember the actual data I needed sorting, but his example of sorting IP addresses was what helped me, specifically -k 2,2n -k4,4n (i.e. numeric sort by column 2 first, then by column 4)

Vim, autocmd and context-aware file headers

I don’t know when I picked it up, or from where (probably pesa’s Vim config, but for some time I’ve been using a filetype.vim file, in the root of my .vim directory, the contents of which is a bunch of lines, looking something like this:

au! BufRead,BufNewFile *.sh setfiletype sh
au! BufNewFile *.sh so ~/.vim/templates/sh_header

And this works like a charm, every new script I start writing on will get a shebang automatically inserted at the beginning of the file.

I never thought about what else one could do with these autocommands though, until I stumbled over a reddit thread, which pointed me here.

If you look into step 2, you will see that the autocmds there does not only read a header into the new file, but also modifies dates etc.

That’s actually pretty sweet.

Data mirroring

Using duplicity as a stateful rsync

Git stuff

A whole bunch of (git) ignore-files for use in various projects

And uet another git feature I feel I really need to learn ;)

Misc

As this video will tell you it is pretty darn hard to understand the scales of stuff like planets. The video does however make a pretty good attempt at visualizing it.

In the past I have linked to a post which wasn’t all that impressed with the idea of hiding the concept of files from users, and here’s another post, this one not particularly impressed with hiding the concept of directories from the users.
For my part, I consider this to be pure idiocracy

Depending on how well executed it ends up being (in my case, light weight has precedence) reditr could be enormously useful.

I have been eyeing dwb as a potential firefox replacement. We’ll see what happens.

Syntactic parses text, and try to build an “understanding” about words, and how they fit together.

The Future is not Real-Time. Put that way, I too really hope it isn’t ;)

2012w29

July 22nd, 2012
Copyright

So apparently just looking at an (web)article of a newspaper (or any web page containing copyrighted content) could mean you are infringing on that publishers copyright… do newspapers actually want to commit that kind of suicide?

I couldn’t decide whether to put this post under “Copyright” or “Censorship” since it involves the MAFIAA using the DMCA to silence things… in this particular case, it would seem, their members own marketing campaigns… With friends like the MAFIAA, who need enemies? :)

Patents

Portable electronic device, method, and graphical user interface for displaying electronic lists and documents now, how could this not apply to every type smartphone, pad, dumb-phone or, for that matter, laptop, in existence? How can such a patent even be granted?

Censorship

Censored by copyright for protesting being censored by copyright, somehow I don’t think that this was how laws were intended to be used when humanity first came up with the concept of rule of law…

Who would have thought that filtering the net may affect more than the specific group targeted by the filter? That’s impossible right?

Surveillance

Facebook is being creepy as hell as usual.

Apparently, Microsoft’s SkyDrive comes with some strings attached

Society

The European Commission intends to make open access all research findings funded by Horizon 2020. This is nice :)
Dunno if EC or UK was first, but UK is thinking along the same lines.

On the other side of the spectrum, i.e. not so nice, if things really are as dire as President Obama would have people believe, wouldn’t the responsible thing to do then, be to secure the infrastructure the hell up, instead of passing laws which any would-be imaginary-or-real terrorist would ignore?

I mean, one of the most idiotic plots in “24” was that nuclear power plants could be remote controlled over the internet. Or in Die Hard 4, that with a couple of taps on a keyboard, the bad guy could redirect a whole bunch of gas to go to the same place at the same time, building pressure, making big badaboom…

Now, if the infrastructure in fact support doing this, remotely, then those who put that in the specification, and those who produced it, and those who installed it, should all be found and tried for dangerously criminal negligence.

Of course, if the end game is to hollow out personal privacy and spy on your own citizens, then it would be better to nibble away on their rights through more new and ineffective laws, which can always be extended later when proven (through a real enemy, someone just being curious, or a false flag operation) not to work.

Justice Department sues telco for daring to challenge its secret demands for private information.

Activism

Targeting Shell with a fake PR campaign. I wonder how long it will be until lobbyists have bought an amendment to some law labeling this sort of activism as terrorism…

Join the Internet Defense League and make sure the internet never loses. Ever. Or, put another way, Rescue the lolcats from the evil clutches of the internet hate league!

Services

Blooie lets you chat online with people who like what you like I am just a tad bit sceptical about this one…

On the one hand, getting in touch with people who like what I like, Free Software, Programming, vim, etc. etc. Great! Buuuuut, how is this not willfully and intentionally putting yourself inside a filter bubble, and only exposing yourself for the types of opinions you yourself already hold? If two people say the same thing, isn’t one of them redundant? I remain a little unconvinced.

Command line

At work this week I needed to get a file from server1 to server3, and the only connection between the two was through an intermediary server, server2. Oh yeah, the only way to communicate between the servers where ssh. Sure, a three step approach was possible (scp file server2: ; ssh server2; scp file server3: ) but the file on server1 could get updated at times, which would mean yet another upload, so a simpler process was needed, a shell script with something along the lines of this:

cat $file | ssh user@server2 "ssh user@server3 \"cat > $file\""

Thanks go to pesa for coming up with the solution.

Programs

TMSU is a program which allows you to tag your files, and then perform queries on the tags, filtering out all files not tagged according to the queried constraints. Neat!

ownCloud is getting more interesting with every passing day.

I never really thought about the fact that you could do lots of things with locate such as adding flags, or configuring directories or files to disregard.

I found an expect-like utility named empty. Funnily enough I found it by checking out the examples of the Zenity fork: Yad.

Cuttlefish: Execute actions when specific events are triggered.

I am also currently trying out this vim statusline.

Throught this question I learnt about fold.

Development

Really nice ELI5 article about how flood fill works, using Zombies and Cats, and Python.

Reading this post and seeing the example resume I agree that what catmoon ponders about would be pretty cool.

Of course, the program should know what skills I have, and only select the relevant out of that set, based on the skills extracted from the job listings. At least that’s how I’d design it, as there is no good reason to lie about what you know and don’t know.

And now I finally grasp how two create quines!

When you screw up, and commit sensitive data to a git repository, this seems like a rather good way to handle it.
Oh and of course, if that sensitive data was a password, CONSIDER THE PASSWORD COMPROMISED AND CHANGE IT!

I had heard about the “Rosetta Code” before, but never got around to checking it out until this weekend, which is when I found this rather intriguing piece of Perl code.

I have to admit to being rather impressed about what one can do with html/css/javascript and some javascript libraries these days.

And although very cool, I still have yet to find a personal use for PhantomJS :/

Text books used in education should be written like this.

Other news

RasPies can now be ordered in bulk.

Here’s to the misfits.

Dunno what it’s good for, but it is pretty.

Stochastic, nerdtastic restaurant bill splitting.

Astronomy Picture of the Day har a pretty sweet image this week.

:wq

2012w28

July 15th, 2012

This week just flew by like a chinchilla with a rocket strapped to its back, but I managed to squeeze in some good laughs and some programming so all in all not too shabby week at all.

Glenn Greenwald: How America’s surveillance state breeds conformity and fear A rather long text (likely due to it being a transcript of a speech) but none the less both fascinating and horrifying at the same time.

And Russia doesn’t seem to fare much better, as Russian Wikipedia goes on strike over censorship plans

(Please note that I’m not trying to single anyone out, I don’t believe for a second that Europe or Sweden is one bit better than their neighbours)

I found a rather depressing thread on reddit where the OP works for a research organization and they have just received a job from the US Gov to carry out a questionnaire (with apparently very directed and leading questions) with the perceived objective to make Americans answer that they are ok with the government collecting data, since, if you can just get statistics saying that others find it ok, you can get the masses on board with the idea as well… Also related: push polls

This is a textbook case of why anonymity still has a place in the world. There were no malice involved here. This was an accident, but if it hurts even one of the outed persons that’s still enough. And that’s why databases, unnecessary or not, should be kept to the bare minimum. Because databases will always leak.

It’s possible that some of the people whose identities were revealed in the email could face workplace sanctions for opposing ACTA (I know a lot of people in the entertainment industry who privately oppose many of their employers’ initiatives), so revealing their identities is a potential big deal.

This ties back to surveillance states breeding conformity (and fear, but in this case the fear of retaliation already existed) because fearing sanctions people may stop speaking up, leading to other people, hesitant, undecided, to think that there must be nothing wrong since no one is speaking up. Conformity.

Although we can always trust in Falkvinge to come up with sensationalist blog posts, in this case I fear he might be right on the money.

With Facebook scanning chats for potentially illegal activities, I wonder how they would react if someone wrote a facebook app which encrypted the conversations between people (preferably through a javascript so the communication is encrypted browser to browser).

I found a fairly decent guide to regular expressions (the only thing which would make it better was if it wasn’t a “cookbook recipes” kind of post, but instead a “learn regular expressions with examples” type of post. But the recipes are broken down into parts and explained and that is really nice, and that’s why I’m mentioning it. A for effort :)

A post about vim completions which I should take to heart and start using more than I already am.

And if you have a non-technical friend who wishes to understand more about UNIXy systems, but would get information overload by non-abstracted techno-babble, my suggestion would be to direct them to Unixmages.

I happened to do something stupid in vim the other day, I pressed C^s, and I think I pressed it believing it would save the contents… C^s in a terminal doesn’t save anything… It will however suspend scrolling (I guess scroll-lock is the most aptly named description) but for all intents and purposes, this the first time it happened to me, I thought the terminal had frozen and I ended up running an xkill on that terminal window.

Today I thought I’d investigate it a little further, and upon doing so I realized that it is an intended feature which could even work at bootup, which I will certainly test the next time I’m booting the system and seeing some weird error message flash by.

Oh, and to “restore” the terminal, make it responsive again, C^wC^q is your friend.

Finally, a vim story which isn’t exactly my story, but close enough that I recognize myself in there :)

Update: Thanks pesa for pointing out the typo, C^q is the correct one
:wq