Daniel Betz

Stuff I waste my time on...

Canvas Buzzwords

Technologies: HTML 5, Javascript

Predefined words are randomly placed on an HTML5 canvas and faded in and out individually.

Compatible with Chrome, Firefox, Internet Explorer 9, Opera, Safari

HTML5 Uploader

Technologies: HTML 5, CSS, Javascript, PHP

Uploads files via XMLHttpRequest. Adding files to the upload queue is as easy as dragging them to the drop area on the page. Alternatively, double-clicking on the drop area invokes a multi-select file <input> element for selecting files “the classic way”. Doesn’t work on all browsers, though.

Windows’ file selection behavior was recreated as good as possible, to provide a familiar environment.

During initialization, a table mapping file extensions to icons is automatically downloaded.

Compatible with Chrome, Firefox, Internet Explorer 10

HTML5 Uploader

HTML5 Video Uploader

Technologies: HTML 5, CSS, Javascript, PHP, CLI PHP

Uploading is handled by the HTML5 Uploader. Files are saved to a pickup directory that is observed by a daemon process. When a new video file is found, it is automatically transcoded to H264/AAC and Theora/Vorbis with ffmpeg and ffmpeg2theora, respectively. Converting to WebM was originally planned but never implemented. Originally, ffmpeg’s support for VP8 was severely lacking.

The daemon is written purely in PHP and uses the pcntl extension for parallelization of transcoding and forking to background. Within certain preset limits, videos are transcoded in parallel.

When the conversions are finished, the video is cleared for playback over the web. For browser not supporting HTML5 videos or the formats used, playback will automatically fall back to JW Player (Flash) or, if Flash is not present, a simple preview image with download links.

The default viewing page also includes a text field containing copy-paste ready embedding code including all fall-backs.

Upload compatibility is the same as HTML5 Uploader. Playback is supported in any browser sporting at least Flash.

Example video

Download Cleaner

Technologies: Javascript

Somewhere along the way, Mozilla decided to revamp how downloads are presented in Firefox. A side-effect of these changes is that now, downloads are no longer recorded in a separate list, but the main browsing history. There’s no way to disable this behavior short of disabling the browsing history completely.

Since I don’t want my download history to remain, I decided to poke around a little and found out how downloads are recorded and, more importantly, how to remove them. Using the Mozilla Add-on SDK, I created a Firefox add-on that looks for new downloads, waits for them to finish, and removes them (after a user-defined delay) from the history. Alternatively, downloads can also be removed when Firefox is closing.

The add-on is available at Mozilla’s add-on repository.

Compatible with Firefox

Add-on at Mozilla


My (other) skills, summarized:

  • Rich Internet Applications with JavaScript and HTML
    • AngularJS
    • Angular2/4
    • React
  • Web Development
    • PHP, MySQL
    • ASP.NET Core
  • Application Development
    • C# with WinForms and WPF
    • Java Standard Edition
    • C/C++
  • C#/C++ Interop with C++/CLI, using Win32-APIs in C#
  • Install and configure Apache HTTPd, Lighttpd and IIS
  • Desktop and server virtualization with VirtualBox, VMware Workstation, VMware ESXi, Linux KVM, LXC
  • Desktop operating systems by Microsoft (Windows 98 through Windows 10)
  • Server operating systems by Microsoft (2003, 2008, 2008 R2), no Active Directory though
  • Linux systems (Debian, Arch, Gentoo) on desktop and server computers
    • Particularly Linux on dedicated servers
  • Planning and assembling desktop and server systems
  • Intermediate knowledge on electrical engineering and electronics
  • Certificate of Proficiency in English for Professional Purposes (Karlsruhe University of Applied Sciences, contains courses “Business English” and “Technical English”)