https://www.linkedin.com/posts/philipphasper_vuforia-ai-ar-activity-7272260967709773826-fSgI
Category Archives: Programs / Games
Step Check Open Beta start
Wow, what a journey šš . We are so proud to finally publicly share one of the things we have worked on since ioxp joined Vuforia: The new Vuforia Instruct feature Step Checkā¢, starts its Public Beta now!
Based on the best-in-class Vuforia technology and developed together with many of the brightest people I know:
ā“ļøAssisted quality assurance using #augmentedreality
ā“ļøIntegrated AI training
ā“ļøAuthoring from CAD
Next steps: learn from the beta feedback, improve and deliver!
Thank you, Vuforia, for how all of you welcomed us and for how we made things possible – together!
#ar #computervision #mixedreality #innovation #service #qualityassurance #acquisition
Update: Special video for the third Sunday of Advent š
Jekyll plugin to bundle zip archives
The website for my recently published C++ book, cpp.hasper.info (German), was made with the static site generator Jekyll. It contains additional information, such as the code of all projects inside the book, as well as the sample solution for the exercises at the end of each chapter.
The reason why I used a static site generator in the first place was that I had all the code files organized in a folder, equipped with a CMake file which made sure the projects compile and are statically analyzed (I used cppcheck and cpplint, albeit with a very reduced set of checks due to the nature of the code examples). In order to not destroy this automation by copy-pasting code into a CMS, the site had to be generated around the code files.
I also wanted to enable the download of all C++ files as zip archive on a per-chapter basis. Again – I did not want to manually create this archive, in case I had to change some code in the future. So I wrote a Jekyll plugin which bundles given files into a zip archive which then can be placed behind a download link.
How it is used:
Filenames as multiple parameters:
{% zip archiveToCreate.zip file1.txt file2.txt %}
Spaces in filenames:
{% zip archiveToCreate.zip file1.txt folder/file2.txt 'file with spaces.txt' %}
A variable to contain a list of files is also possible:
{% zip ziparchiveToCreate.zip {{ chapter_code_files }} %}
The plugin code:
The plugin can be found here: https://github.com/PhilLab/jekyll-zip-bundler
# frozen_string_literal: true
# Copyright 2021 by Philipp Hasper
# MIT License
# https://github.com/PhilLab/jekyll-zip-bundler
require 'jekyll'
require 'zip'
# ~ gem 'rubyzip', '~>2.3.0'
module Jekyll
# Valid syntax:
# {% zip archiveToCreate.zip file1.txt file2.txt %}
# {% zip archiveToCreate.zip file1.txt folder/file2.txt 'file with spaces.txt' %}
# {% zip {{ variableName }} file1.txt 'folder/file with spaces.txt' {{ otherVariableName }} %}
# {% zip {{ variableName }} {{ VariableContainingAList }} %}
class ZipBundlerTag < Liquid::Tag
VARIABLE_SYNTAX = /[^{]*(\{\{\s*[\w\-.]+\s*(\|.*)?\}\}[^\s{}]*)/mx.freeze
CACHE_FOLDER = '.jekyll-cache/zip_bundler/'
def initialize(tag_name, markup, tokens)
super
# Split by spaces but only if the text following contains an even number of '
# Based on https://stackoverflow.com/a/11566264
# Extended to also not split between the curly brackets of Liquid
# In addition, make sure the strings are stripped and not empty
@files = markup.strip.split(/\s(?=(?:[^'}]|'[^']*'|{{[^}]*}})*$)/)
.map(&:strip)
.reject(&:empty?)
end
def render(context)
# First file is the target zip archive path
target, files = resolve_parameters(context)
abort 'zip tag must be called with at least two files' if files.empty?
zipfile_path = CACHE_FOLDER + target
FileUtils.makedirs(File.dirname(zipfile_path))
# Create the archive. Delete file, if it already exists
File.delete(zipfile_path) if File.exist?(zipfile_path)
Zip::File.open(zipfile_path, Zip::File::CREATE) do |zipfile|
files.each do |file|
# Two arguments:
# - The name of the file as it will appear in the archive
# - The original file, including the path to find it
zipfile.add(File.basename(file), file)
end
end
puts "Created archive #{zipfile_path}"
# Add the archive to the site's static files
site = context.registers[:site]
site.static_files << Jekyll::StaticFile.new(site, "#{site.source}/#{CACHE_FOLDER}",
File.dirname(target),
File.basename(zipfile_path))
# No rendered output
''
end
def resolve_parameters(context)
# Resolve the given parameters to a file list
target, files = @files.map do |file|
next file unless file.match(VARIABLE_SYNTAX)
# This is a variable. Look it up.
context[file]
end
[target, files]
end
end
end
Liquid::Template.register_tag('zip', Jekyll::ZipBundlerTag)
xkcd widget
When I saw the xkcd comic “Now”, I immediately wanted it as widget on my smartphone. A cool little gadget showing you the approximate time of day all around the world.
I searched trough the Google Play Store and only found versions with a huge file size – since they just stored all possible images in the app files, the widgets reached a size of around 25 MB.
So I spent a few hours learning how to built Android widgets and compiled my own version – fewer than 1 MB big and with a cool preview animation.
Download the xkcd widget and try it for yourself!
Passdraw
Passdraw is my first smartphone app on Google Play.
Passdraw is a special keyboard assisting you with entering your passwords – which is normally ridiculously annoying on smartphones. After you have done the setup just draw one of your secret paths whenever you need your password!
—————————————————–
+ No annoying switching between special characters and normal keyboard layout
+ Bystanders don’t get to see the original characters
+ This app does not know your password either
+ No extra permissions – your data stays with you!
+ No need for simple passwords
—————————————————–
More information under www.passdraw.com or directly on Google Play.
Update (December ’13): I am currently working on a complete redesign with an entirely new algorithm and a new user interface. So stay tuned!
MitfahrApp
The MitfahrApp is an online portal for hitchhiking.
Due to the integration with Facebook, you are able to see who is going to sit in the car with you before you start your trip. You can find it via MitfahrApp.de.
The Facebook application was developed in in a team of four people and is the successor of the StudiVZ Mitfahrapp.
Hobson 2008
Hobson 2008 is a program suite which simplifies the selection of classes for German A levels. It replaces the current paper-based system by a web interface for the pupils and a management application for the school’s administration. Pupils can submit their course selection online while the administration is able to process the data and export them to third-party programs such as lecture-planning software.
Every 10th grader is assigned an account with which they can authenticate in the web interface to update their personal information whenever necessary, and finally make their course choices according to the limitations set by the Ministry of Education (the standard limitations are those of Rhineland-Palatinate).
The project was created as part of a school project and was developed together with Oliver Klupp. Those interested in the software can get an idea by downloading the (German) manual.
Hobson Manual
I need H.E.L.P
IĀ needĀ H.E.L.P. (High-End-Lautlos-PC – translates into High-End-Silent-PC) is a jump&run-game telling the story of a poor computer modder fighting against out-dated technology to reach his aim – the H.E.L.P. .
The game was created during a creativity competition managed by CHIP-Online. They assembled six different personal computers (a gaming pc, a home theater pc, …) and asked their community to apply for one of them in a creative way. IĀ needĀ H.E.L.P. was my application for the “Lautlos-PC” (a completely passive cooled and therefore almost soundless computer).
Accidentally I won this computer. My complete application (in German) can be found here. The game is compatible with Wine.
I need H.E.L.P.
Ghostball 3
Let’s play two-dimensional ghost soccer – with a friend or against the computer! Special tricks, a basic ai and 10 different levels of difficulty provide hours of fun!
GhostballĀ 3 was programmed in 2006 and was my first “real” game. It is compatible with Wine.