Bash right prompt

Michał ‘mina86’ Nazarewicz | 28 września 2015

There are multiple ways to customise Bash prompt. There’s no need to look for long to find plethora of examples with fancy, colourful PS1s. What have been a bit problematic is having text on the right of the input line. In this article I’ll try to address that shortcoming.

Getting text on the right

The typical approach is using PROMPT_COMMAND to output desired content. The variable specifies a shell code Bash executes prior to rendering the primary prompt (i.e. PS1).

The idea is to align text to the right and then using carrier return move the cursor back to the beginning of the line where Bash will start rendering its prompt. Let’s look at an example of showing time in various locations:

__command_rprompt() {
	local times= n=$COLUMNS tz
	for tz in ZRH:Europe/Zurich PIT:US/Eastern \
	          MTV:US/Pacific TOK:Asia/Tokyo; do
		[ $n -gt 40 ] || break
		times="$times ${tz%%:*}\e[30;1m:\e[0;36;1m"
		times="$times$(TZ=${tz#*:} date +%H:%M)\e[0m"
		n=$(( $n - 10 ))
	done
	[ -z "$times" ] || printf "%${n}s$times\\r" ''
}
PROMPT_COMMAND=__command_rprompt
Terminal window presenting right prompt behaviour.

Clearing the line on execution

It has one annoying issue. The right text reminds on screen even after executing a command. Typically this is a matter of aesthetic but it also makes copying and pasting session history more convoluted.

A manual solution is to use redraw-current-line readline function (e.g. often bound to C-l). It clears the line and prints the prompt and whatever input has been entered thus far. PROMPT_COMMAND is not executed so the right text does not reappear.

Lack of automation can be addressed with a tiny bit of readline magic and a ~/.inputrc file which deserves much more fame than what it usually gets.

Tricky part is bindind C-m and C-j to two readline functions, redraw-current-line followed by accept-line, which is normally not possible. This limitation can be overcome by binding the key sequences to a different sequence which will be interpreted recursively.

To test that idea it’s enough to execute:

bind '\C-l:redraw-current-line'
bind '\M-\C-j:accept-line'
bind '\C-j:"\C-l\M-\C-j"' '\C-m:"\C-j"'

Making this permanent is as easy as adding the following lines to ~/.inputrc:

$if Bash
    "\C-l": redraw-current-line
    "\e\C-j": accept-line
    "\C-j": "\C-l\e\C-j"
    "\C-m": "\C-l\e\C-j"
$endif

With that, the right prompt will disappear as soon as the shell command is executed. (Note the use of \M- in bind command vs. \e in ~/.inputrc file).

Czytaj dalej »

Mobile is the Future

Michał ‘mina86’ Nazarewicz | 17 marca 2015

Photo of a smashed mobile phone.

(photo Cory Doctorow, CC-BY-SA)

A few days ago I received an email from Google Wembaster Tools saying no more no less but: ‘Your webpage sucks on mobile devices!’ Or something. Now that I think of it, I could have been worded slightly differently. The gist was the same though.

I never really paid that much attention to how my site looks on phones and tables. I’ve made sure it loaded and looked, but apart from that never spent much time on the issue. I always thought optimising for a small screen would be a lengthy and painful process. How mistaken I was!

In my defence, when I last looked at the problem, state of mobile browsers was different; now there are really just two things to do. First of all, add a viewport meta tag, e.g.:

<meta name=viewport
      content="width=device-width, initial-scale=1">

and then use min-width or max-width CSS media queries. Admittedly the second part may take some time, but if your layout uses simple markup rather than being TABLE-based, reading the excellent article on A List Apart might turn out to be the most time consuming step.

If you haven’t already, do take a look at whether your website looks reasonably well on small screens. Apparently mobile is the future, or some such.

The ‘bad’ news is that I’ve dropped endless scroll feature. This is because in narrow layout the sidebar moves to the bottom and endless scrolling would make it unreachable since it would run away all the time.

The time has come to stand up for the GPL

Michał ‘mina86’ Nazarewicz | 11 marca 2015

For people who know me it should come with no surprise that support free software in most forms it can take. I also believe that if someone gives you something at zero price, basic courtesy dictates that you follow wishes of that person. This is why when Software Freedom Conservancy started a GPL Compliance Project for Linux Developers I didn’t hesitate even for a minute to offer little Linux copyright I held to help the effort.

Most importantly though, it is why I fully support Conservancy in taking legal action against VMware which for years has been out of compliance with Linux’s license.

If you care about free software, the GPL or want more projects like OpenWrt, consider donating to help Christoph Hellwig and the Conservancy with their legal battle against this multi-billion-dollar corporation who for some reason decided to free-ride on other people’s work without respecting their wishes.

If you don’t feel like, or for whatever reason cannot donate, twitting something along the lines of ‘Play by the rules, @VMware. I defend the #GPL with Christoph & @Conservancy. #DTRTvmware Help at https://sfconservancy.org/supporter/’ or otherwise spreading the word will help as well. Oh, and in case you were, like I was, wondering — DTRT stands for ‘do the right thing’.

And if you want to know more:

Miscellaneous tips and tricks

Michał ‘mina86’ Nazarewicz | 14 grudnia 2014

Don’t you hate when you need to do something you had done before, but cannot remember how exactly? I’ve been in that situation several times and sometimes looking up for a correct method turned out considerably harder than it should. To alleviate the need for future Googling, here’s a bag of notes I can reference easily:

Looking for Python stuff? Those are now in separate post:

Czytaj dalej »

Bose QuietComfort 15 vs. JH Audio 13

Michał ‘mina86’ Nazarewicz | 25 maja 2014

A few years back I bought Bose QuietComfort 15 headphones. It was around the time I discovered just how noisy things can get at the altitude of around 10 km. QC15s turned out to be a life saver making an unbearable flights slightly more bearable.

A few months ago I decided to risk substantial amount of money and got custom-made JH Audio in-ear monitors (or IEMs), model JH13 Pro — the risk was especially big since, for obvious reasons, they couldn’t be resold. Was it worth it?

Czytaj dalej »

Map-reduce explained

Michał ‘mina86’ Nazarewicz | 18 maja 2014

Outside of functional programming context, map-reduce refers to a technique for processing data. Thanks to properties of map and reduce operations, computations which can be expressed using them can be highly parallelised, which allows for faster processing of high volumes of data.

If you’ve ever wondered how tools such as Apache Hadoop work, you’re at the right page. In this article I’ll explain what map and reduce are and later also introduce a shuffle phase.

Czytaj dalej »

Review of the EU copyright rules

Michał ‘mina86’ Nazarewicz | 31 stycznia 2014

This is a public service announcement to inform you, if you are not yet aware, that European Union is asking for input on the review of copyright rules. The deadline for submission of the questionnaire is 5th of February so if you want to give your opinion you should hurry.

Answering 80 questions may not be your idea of fun. Fortunately you don’t have to answer all of the questions plus to makes matter easier you can use a simplified web-form at copywrongs.eu or read a simple guide by Amelia Andersdotter, a Swedish Pirate Party politician and Member of the European Parliament.

For more news coverage, head to EFF or TorrentFreak.

Progress in Games

Michał ‘mina86’ Nazarewicz | 25 listopada 2013

“…and this pun with savegames in GTA.” my friend laughed.

“What pun? What savegames?” I asked with a blank stare.

“You know, ‘Jesus saves’.” he explained looking at me like I’m crazy.

“Wait, you could save game in GTA?” I raised my brow in disbelief.

That’s how I found out about savegames in GTA. This was years after I finished the game, twice, completing each city in one go. But as fun as GTA was, it wasn’t the game I spent most time playing. That title goes to Doom 2. To this day, I put it at the top of all FPS games ever.

Why do I mention those old, long forgotten titles? Let’s fast forward a little.

Apocalypse

I don’t usually buy games on a tangible medium. Doom 3, however, is one of the few that sits on my shelve. When I played it though, I had this uneasy feeling… Something wasn’t right. Almost as if I didn’t get what I had hoped for. The game was dark, and slow. Encounters with monsters jumping out from the darkness, were separated by journeys through dark corridors. Dim lights showed you the way in the darkness as you slowly progressed in each level, but did not reveal the danger, as that was hidden in dark corners.

I’m not a great writer, so that’s probably why I overused “dark” in the above paragraph. To my defence, so did id Software. In some respects, Doom 3 felt like a technical demo of their shiny rendering engine. The team went overboard with all the new features, and instead of creating a successor of a game I love so much, they’ve created a poor attempt at duplicating System Shock 2 (a game which even with its “outdated” graphics is much more enjoyable and immersive then Doom 3)… or something… I don’t know what exactly to be honest.

Fortunately, there’s also Classic Doom 3. A mod created by Flaming Sheep Software. It is a remake of shareware levels of the original Doom, and it is wonderful. It’s fast paced, with energetic music, no unneeded interruptions, no cut-scenes, and as far as I’m concerned, that’s the game I wanted id Software to make. It’s a pity they didn’t.

Czytaj dalej »

The Internship

Michał ‘mina86’ Nazarewicz | 7 października 2013

Due to my current position, I’ve been asked about The Internship several times. Having very low expectations about that title, I’d actually been avoiding it and thus were unable to comment. I have a very special place for watching films that I don’t expect to be good though — a plane. Here I am, flying to Pittsburgh, and those are some of my thoughts.

Most importantly, apart from being filmed at Google Mountain View campus and with some of the Google employees starring in it, the film has very little to do with Google. This should not be a surprise though. In particular, it does not show how Google internships work. I should know, I host an intern. In no particular order:

  • It’s perfectly fine to go for a beer with your boss. I do it all the time. In fact, a customary way of saying goodbye to an intern is going out with the team.
  • It’s perfectly fine to date a fellow Googler or be married to one for that matter. The usual caveats apply, like you shouldn’t date your manager or report. If in doubt, ask HR and they’ll figure something out.
  • Yes, food in cafeterias and µkitchens is free. Working at Google you may in fact get so used to it, that you’ll end up taking a ‘free’ fruit in Starbucks.
  • You actually can take food home but be reasonable about it. Some offices offers plastic containers during dinner so one can take a hot meal home. Moreover, noöne will mind if you take a snack every now and then. Mountain View campus also serves lunch on weekends.
  • Googlers are not such introverts so as to being unable to talk.
  • I may be stating the obvious, but there’s no ‘winner team’ and each intern is evaluated individually. It wouldn’t make sense any other way. In fact, interns are not teamed up together nor given tasks to work on their own (i.e. without Googler’s help).
  • This again may be obvious, but for the sake of completeness, interns never work on such broad variety of subjects. Writing an app, tech support and finding clients? No one would be able to all of do that. Interns are given a specific task in a scope of the team they are in.
  • You don’t take a full big GBus to take a few people to a restaurant. But yes, something like GBus does exists, and it’s a shuttle service taking Googlers to and from offices in Bay Area. And they are awesome — convenient and even have WiFi.
  • Yes, the terms Noogler and Googly, as well as, Noogler’s hats and TGIFs are all real. Even though the last one does not take place on Fridays in all offices. There are also other terms. The two I can recall from the top of my head are: Zoogler — Googler working at the Zürich office — and Spoogler — spouse of a Googler. Their usage varies; some people don’t particularly like them.

Other then that, the film wasn’t really funny, but the story had a few highlights, like that fact that you won’t get a job at Google if you are a jerk.

Czytaj dalej »