PieDock

Description

PieDock is a task bar and application launcher in shape of a pie menu. It feels a little bit like the famous OS X dock in a circle. Here are some screenshots:

Focusing The GIMP in Fluxbox Real transparency over a video in Xfce4 Managing a window in Fluxbox Switching applications in Ubuntu

To see the idea in action, try the WebPie demo or watch this video.

Download

Latest version: piedock-1.6.6.tar.bz2

Options:

  • Full automatic install or update:

    $ curl piedock.markusfisch.de/install.sh | sh

    If you don't have curl, just download the source tarball, extract it, change into the new directory and type:

    $ sh/deploy

    This will configure, build, install and run PieDock.

  • If you're on Gentoo Linux, you may use emerge:

    $ emerge piedock

    This may not always be the latest version.

  • The development version is available on GitHub.
    You may easily clone the project by running:

    $ git clone git://github.com/markusfisch/PieDock

Requirements

Requires a C++ compiler, headers and libraries of X11 and libpng. Xft and the X Rendering Extension (to make use of a compositing manager) are optional.

Runs on Linux, BSD and Solaris.

Installation

  1. Download tarball above

  2. Unpack tarball:

    $ tar xjvf piedock-x.x.x.tar.bz2
  3. Change into the new directory "piedock-x.x.x" and compile it:

    $ cd piedock-x.x.x
    $ ./configure
    $ make
  4. If everything went well, install as root:

    # make install
  5. Now you need to set up your configuration, either manually (see below) or by running the enclosed setup script:

    $ sh/setup

Configuration

  1. Find some icons (approx. 128x128 Pixels) in PNG format. I'd recommend those places:

    You may use GIMP to convert XP icons; OS X icons can be converted by gthumb or ImageMagick.

  2. Create a directory named ".piedock" in your home directory:

    $ mkdir ~/.piedock
  3. Place all your PNG icons into this directory

  4. Create a ".piedockrc" configuration file in your home directory; you may use the enclosed "res/piedockrc.sample" as a template:

    $ cp res/piedockrc.sample ~/.piedockrc
  5. Edit ".piedockrc" to meet your requirements. The format of the file is very simple: Each line begins with a statement and continues with space-seperated arguments to this statement. If an argument has spaces, it must be enclosed in quotes, just like you do on the command line. There are only two statements that are important: icon and alias.

    Use the icon statement to specify persistent icons in the menu. Normally an icon would only appear if there is a corresponding window. icon icons do always appear. The statement accepts two arguments: the name of the application (which must also be the name of the icon in "~/.piedock/") and, optionally, a string to launch the application if the first argument isn't enough to do that (i.e. a path is required or you want to give some arguments).

    The alias directive allows you to recognize windows that do not give the correct name of their corresponding executable. Every application window in X11 should have a resource with it's name in it (the so-called class hints for the interested).

    Unfortunately, this name may differ from the name of the executable which is where alias comes in. alias accepts two arguments: a string for recognition and the true name of the executable. The recognition string may be prefixed by another argument (either name, class or title) to specifiy the property which the string is checked against.

    There is a "utils" subdirectory which contains a helpful utitlity to find the right settings. Just change into this directory and do:

    $ ./piedockutils -l

    A list of all open windows with their properties will be displayed. Now you can use those values (always prefer the class or name property) to set up aliases for windows which doesn't get recognized the right way.

  6. If you have some unused button on your mouse, I suggest you specify its number to the trigger button directive like this:

    trigger button (number of mouse button)

    You may find the right number by using the xev utitlity. Then you can open the pie menu by clicking that button.

Documentation

Browse source code documentation.

License

PieDock is open source and licensed under the MIT license.

WebPie

Description

WebPie is a pie menu for web pages. Its appearance is very similar to PieDock. Image and animation quality do depend heavily on browser and operating system.

Download

Latest version: WebPieIcon.js and WebPie.js

Those files are uncompressed. To get production libraries, use a compressor.

The development version is available on GitHub.
You may easily clone the project by running:

$ git clone git://github.com/markusfisch/WebPie

How to use

  1. Place both files somewhere in your web project and add those two lines to the <head/> element of your web page:

    <script type="text/javascript"
    	src="path/to/WebPieIcon.js"></script>
    <script type="text/javascript"
    	src="path/to/WebPie.js"></script>
  2. Next you'll have to set up the menu, for example:

    <script type="text/javascript">
    <!--
    var p = new WebPie( {
    	icons: [
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "First" ); } ),
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "Second" ); } ),
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "Third" ); } )
    		] } );
    p.create();
    -->
    </script>

    For more information browse the script files. For a full sample see DemoWebPie.js.

  3. If you want to extend WebPie, you may want to subclass it. For example:

    <script type="text/javascript">
    <!--
    WebPie2.prototype = new WebPie();
    WebPie2.prototype.constructor = WebPie2;
    function WebPie2( p )
    {
    	WebPie.call( this, p );
    }
    WebPie2.prototype.preShow = function( e )
    {
    	// do here what you want to do before the menu opens
    	return true;
    }
    var p = new WebPie2( {
    	icons: [
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "First" ); } ),
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "Second" ); } ),
    		new WebPieIcon(
    			"path/to/icon.png",
    			function(){ alert( "Third" ); } )
    		] } );
    p.create();
    -->
    </script>

Compatibilty

Works with the latest versions of Opera, Firefox, Chrome, Safari and Internet Explorer.

License

WebPie is licensed under the MIT license.

ShaderEditor

Description

Create and edit GLSL shaders on your Android phone or tablet and use them as live wallpaper.

Google Play

Source

This app is open source. Clone, fork, contribute on GitHub.

Features

  • Live preview

  • Syntax highlighting

  • Error highlighting

  • FPS display

  • Use any shader as live wallpaper

  • Exposure of accelerometer sensor

  • Exposure of wallpaper offset

  • Previous rendered frame in backbuffer texture

Tips

How many FPS should I get to set my shader as live wallpaper?

Some devices do limit the GPU to consume less power when not plugged in. That's why you should always check your FPS in full screen (use the eye icon in the upper left) with the power cord off. Your shader should make at least 30 FPS or so to not slow down the UI. Low resolution displays will produce better FPS as there's just a lot less to calculate.

How much battery will a live wallpaper take?

A live wallpaper should only consume battery when you see it. So it generally depends on how often and how long you look at it. With normal use, you shouldn't note a difference in battery consumption.

Errors are not highlighted

Unfortunately error information is disabled on some devices (e.g. Huawei Ideos X3, Asus Transformer). Error highlighting/reporting is not available on these devices.

Wave lines live wallpaper

Description

A simple, unobstrusive live wallpaper for Android showing slowly moving wave lines.

Google Play

Originally written on my phone using AIDE.

Source

This app is open source. Clone, fork, contribute on GitHub.

Features

You can choose a color theme, build your own, change if the lines should grow and shrink or if they should have a uniform width. The lines may swing in harmony or each line independently. You may set the number of lines, the number of waves in a line and the maximum amplitude.

simsalabash

Description

Static site generator in BASH. For command line nerds. With love.

A sample is worth a thousand words:

$ mkdir contents htdocs layouts
$ echo '<h1>Hello World</h1>' > contents/Hello-World
$ echo '<html><body>`content`</body></html>' > layouts/contents.html
$ simsalabash
$ firefox htdocs/index.html

Download

Latest version: simsalabash

The development version is available on GitHub.
You may easily clone the project by running:

$ git clone git://github.com/markusfisch/simsalabash

How does it work?

For every file in contents/, the corresponding layout will get expanded into htdocs/ where the output is stored under the name of the content file with the extension of the layout file.

Layouts correspond to content files, when their name (without extension) does match a component of the (relative) path of the content file. Matching starts from the rear end with the file name.

In your content and/or layout files you may use shell expansions like

$(command)
or
`command`
or
$((expression))
or
Hi, this is $USER talking.

to combine your website.

simsalabash does provide the following handy commands:

  • title
    Prints the title which is the formatted file name of the content file in process.

    usage: title
  • nav
    Prints a recursive standard list navigation.

    usage: [(UNFOLD|FLAT)=1] nav [PATH]
    PATH - content path (optional, defaults to content/)
    UNFOLD - unfold navigation, this will make a sitemap
    FLAT - do not dive into subdirectories
  • content
    Prints the content of file in process.

    usage: content
  • include
    Include (and expand) another content/layout file.

    usage: include FILE...
    FILE - path and name of file to include

Apart from that, you're free to invoke any command you like. For example, you may do something like this:

$FILE was written by `whoami`

$FILE holds the path and name of the content file in process.

How to extend simsalabash?

There are two places for additional source files:

$HOME/.simsalabash/
$PWD/lib/

Use the first location for general extensions you want to have always. Use the latter for project specific extensions and modifications.

You can override existing functions to extend simsalabash or add new ones to add further functionality.

How to use Markdown?

Download Markdown.pl and put it into your path. Then paste this

content()
{
	include $FILE | Markdown.pl
}

into a file in $HOME/.simsalabash/ to override and extend the default function.

Purpose

simsalabash aims to be a simple tool to combine a website from a bunch of text files and generate a recursive standard list navigation for it.

It was designed to minify the effort to build and maintain small static websites and targets the experienced BASH user.

simsalabash is not a Jack of all trades, though. Please check out the advantages and disadvantages:

Advantages and principles

  • Little to no configuration.

  • Meaningful structure of content/ which mirrors your web site.

  • Automatically generates a recursive standard list navigation.

  • Easy sorting of navigation items with .nav files.

  • The output directory is not temporary so assets and downloads won't get copied everytime you're doing an rsync.

  • No dependencies beyond BASH, cat, mktemp, rm and probably tr (BASH < 4).

Disadvantages and limitations

  • Markdown and things like that are external.

  • There's no integrated web server and never will be.

  • BASH is slow (but fast enough for any web site of reasonable size).

  • BASH is not object-oriented, nor easy, nor hip.

License

simsalabash is licensed under the MIT license.

readmail

Description

BASH eMail client. Only POP and SMTP are supported.

Probably the worlds smallest, simplest, yet full featured eMail client without any dependencies beyond a working GNU environment running BASH.

Use it as a fallback, as a quick & slim alternative or as a tool to read, send and manage messages.

Download

Latest version: readmail

The development version is available on GitHub.
You may easily clone the project by running:

$ git clone git://github.com/markusfisch/readmail

Requirements

A working GNU environment running BASH.

Features

The following commands are available:

$ readmail h q
  p(eek)               peek for new messages
  s(tatus)             request mailbox status
  n(ew)                list new messages only
  t(ail) [N]           list the latest N messages
  l(ist) [N[-N]]...    list messages
  r(ead) [N[-N]]...    read message
  x(tract) N           extract attachments of message N
  f(ile) N[-N]...      file message
  d(elete) N[-N]...    remove message
  a(nswer) N           answer message
  w(rite) ADDRESS      write a message to ADDRESS
  m(ime) FILE          show a message file in MIME format (e.g. *.mbs)
  c(lear)              clear screen (or CTRL+L)
  h(elp)               show this info
  q(uit)               quit (or CTRL+D)

You may invoke the commands directly from the command line, e.g.:

$ readmail s 'f 1' 'r 3-5' q

Or inside the interactive shell.

Examples

Quickly get the size of your mailbox:

$ readmail s q

Show your latest message:

$ readmail r q

Get the number of new messages since the last call:

$ FORMAT="%d\n" readmail p q

Send a message in one line:

$ ATTACHMENTS=' ' SUBJECT='subject' BODY='body' \
	readmail 'w john@example.com doe@example.com' q

Send one or more files:

$ ATTACHMENTS='file1 file2' SUBJECT='subject' BODY='body' \
	readmail 'w john@example.com' q

Installation

  1. Download the file above

  2. Make it executable:

    $ chmod a+x readmail
  3. Place the script somewhere in your path, i.e. for a local install do:

    $ mv readmail ~/bin/readmail
  4. Set up your configuration, see below

Configuration

Just run readmail or:

  1. Create ".readmailrc" in your home directory:

    $ vi ~/.readmailrc
  2. Put the following lines into it (fill in the values in brackets):

    POP_HOST='(your POP3 server)'
    POP_ACCOUNT='(your POP3 account)'
    POP_PASSWORD='(your POP3 password, this is optional)'

    If you don't want to give passwords, readmail will ask you for it.

  3. Append this block to configure your SMTP settings:

    SMTP_HOST='(your SMTP server)'
    SMTP_ACCOUNT='(your SMTP account)'
    SMTP_PASSWORD='(your SMTP password, this is optional)'
  4. TIP: If you use "@" for the name of the script, you have always quick access and can query your eMails by:

    $ @ n q

    In this case your configuration file must read ".@rc", of course.

License

readmail is Public Domain.

ZoomGrid

Description

ZoomGrid is a grid which can zoom its cells. In other words, it's a two-dimensional accordion menu inside a fixed rectangle.

Alternatives:

Download

Latest version: ZoomGrid.js.

Extensions:

Those files are uncompressed. To get production libraries, use a compressor.

The development version is available on GitHub.
You may easily clone the project by running:

$ git clone git://github.com/markusfisch/ZoomGrid

How to use

  1. Copy ZoomGrid.js (along with any optional extension) into your web folder and add a corresponding <script/> tag for each file to the <head/> element of your page.

    <script type="text/javascript"
    	src="path/to/ZoomGrid.js"></script>
    <script type="text/javascript"
    	src="path/to/ZoomGridTransparency.js"></script>
    ...
  2. Then invoke the grid:

    <script type="text/javascript">
    <!--
    var z = new ZoomGrid(
    	{ container: document.getElementById( "Contents" ) } );

    In this case, you should have a <div id="Contents"/> somewhere on your page, of course.

  3. After that, you need to activate the extensions you want to use. For example, to activate the transparency extension do:

    z.addTransparency();
    -->
    </script>

    Some extensions may require attributes. Just look at the corresponding source file. For a full sample see DemoZoomGrid.js.

Compatibilty

Works with the latest versions of Opera, Firefox, Chrome, Safari and Internet Explorer.

License

ZoomGrid is Public Domain.

cpprc

Description

C++ resource compiler. cpprc will generate a C++ source file (along with the corresponding header file) that embeds any given data file and provides a Resource class which gives access to this data. The Resource class can be created in two flavours: one using STL streams, the other is using WxWidgets streams.

If you know "qtrc" of the famous QT toolkit, then you know what this tool is doing too.

Download

Latest version: cpprc-0.4.3.tar.bz2

The development version is available on GitHub.
You may easily clone the project by running:

$ git clone git://github.com/markusfisch/cpprc

Requirements

This tool should run on any system that has a decent C++ compiler.

Installation

  1. Download tarball above

  2. Unpack tarball:

    $ tar xjvf cpprc-x.x.x.tar.bz2
  3. Change into the new directory "cpprc" and compile it by:

    $ cd cpprc
    $ make
  4. Place the executable somewhere in your path, i.e. for a local install try:

    $ mv cpprc ~/bin

    Or, if you want to make the program available for all users, do this as root:

    $ mv cpprc /usr/local/bin

Configuration

There is no configuration necessary.

If you are using Makefiles and (at least) a *nix-like environment and have your resources in a subdirectory called say "data", you can do something like this in your Makefile:

resources:
	if ! [ -f Resources.cpp ] || \
		[ "`find data/ -newer Resources.cpp`" ]; then \
		cpprc -f wxWidgets -o Resources `find data/ -type f`; \
	fi

License

Cpprc is open source and licensed under the MIT license.

About

Some photos of Markus Fisch

What is this all about?

This is a mixed and very loose collection of things I wrote in my spare time which I consider worth sharing.

This and that

  • Twitter
    News and noise. You decide.

  • GitHub
    Fork or contribute.

  • Gists
    Miscellaneous code snippets.

  • Kartpokal
    Local indoor go-kart championship. If you're into that kind of stuff, live anywhere near me and/or don't know what to do any given sunday.

  • Striker
    A (very old) vertical shooter. Still fun.

For germans: Warum ist hier alles in Englisch?

Darum:

Locations of visitors to this page