Software engineering, problem solving, nerd stuff

Using GitHub forks or local Git repositories with Composer

For two weeks I have been heavily developing a new web application based upon Laravel. Tonight I searched for an easy filtering solution like Zend_Filter so that the request strings are automagically trim’d, lowercased, and so on. Lucky me, the repository https://github.com/rmasters/filter is available with a composer.json but latest commit from 2013 is not compatible with Laravel 5.1. The compatibility fix would be trivial: editing two files in the composer.json and it is done. But how can I use my own fork on GitHub or my local cloned repository?

I learned, that I can add a repository reference to the composer.json of my application:

"repositories": [
		{
			"type": "vcs",
			"url": "http://github.com/schakko/filter"
		}
	],

Additionally, I have to specify my development branch which contains the Laravel 5.1 fix (laravel51):

    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "laracasts/flash": "~1.3",
        "cocur/slugify": "dev-master",
        "rmasters/filter": "dev-laravel51"
    },

It is important that the Git branch is named laravel51 and not dev-laravel51, otherwise you will receive an error like

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested package rmasters/filter could not be found in any version, there may be a typo in the package name.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion for more details.

Read https://getcomposer.org/doc/articles/troubleshooting.md for further common problems.

Another neat feature is that Composer supports local repositories without any problems. During testing I changed my repository to

	"repositories": [
		{
			"type": "vcs",
			"url": "c:/ckl/projects/github/filter"
		}
	],

and had no longer to push my changes to the remote repository. The code has to be committed to local branch, of course.

Using Subselects with CQL in CMDBuilds “filter” type properties

CMDBuild supports the usage of SQL queries inside the “filter” options if the type is a REFERENCE.

Given:

  • A lookup table named “Software Type” [{Code: DBMS}, {Code: App}]
  • A class Application [{Code: MySQL, Type: DBMS}, {Code: PostgreSQL, Type: DBMS}, {Code: Tomcat, Type: App}]; “Type” references the lookup table “Software Type”
  • A class ApplicationRelease [{Code: “MySQL 5.0”, Application: MySQL}, {Code: “PostgreSQL 9.x”, Application “PostgreSQL”}, {Code: “Tomcat 7.0”, Application “Tomcat”}]; “Application” is a foreign key to the Application class.
  • A class DbmsInstance with a reference/foreign key to ApplicationRelease

Target:

  • By adding/modifying a DbmsInstance, only ApplicationReleases shall be shown which are of type “DBMS”.

How to solve this by using a subselect:

from ApplicationRelease where Id (/(
  SELECT "Id" FROM "ApplicationRelease" WHERE "Application" IN 
	(SELECT "Id" FROM "Application" WHERE "Type" = 
		(SELECT "Id" FROM "LookUp" WHERE "Code"='DBMS')
	)
)/)

Please note, that every referenced column must be quoted with double quotes. Every value of WHERE clause must be quoted using single quotes only!
The (/(…)/) construct introduces plain SQL.

Trying to install CMDBuild and receiving an ORMException “ORM_GENERIC_ERROR”

CMDBuild is a free (“free” as in GPL v2) ITIL solution. The installation of the 2.3.1 version has been a pain in the ass. After applying the database information in the setup wizard, I always received an org.cmdbuild.exception.ORMException: ORM_GENERIC_ERROR. CMDBuild stores its log files (cmdbuild.log, cmdbuild_dd_sql.log) in the “logs” folder of Tomcat where I could find the root cause for this issue. Our PostgreSQL instance is installed on a Windows machine and holds two database templates. template0 has UTF-8 default encoding, template1 uses WIN-1252. During the installation of the database schema of CMDBuild, the template1 is used. The WIN-1252 encoding of template1 is not compatible with the used UTF-8 encoding of CMDBuild/Java. I fixed this issue by re-creating the template1 schema with UTF-8:


DROP DATABASE template1;
CREATE DATABASE template1 WITH template = template0 ENCODING = 'UTF8';
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

The next time I hit the install button of the wizard, I received another ORM_GENERIC_ERROR. This time the log stated that the plpgsql language was missing for template1. I altered the template1 by issuing a “CREATE LANGUAGE plpgsql”. After that I was able to install CMDBuild.

Unattended installation of Windows Server 2012 R2 in VirtualBox and getting an 0x80042565 error

Today I struggled with a working configuration for an autounattend.xml for 9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_DE-DE-IR3_SSS_X64FREE_DE-DE_DV9.ISO (Windows Server 2012 R2, Standard, Standard Core, Datacenter and Datacenter Core). The unattended installation inside VirtualBox always failed with an error 0x80042565 or did not use the partition scheme I had previously provided.

I suppose that the problem occured in the first place because of the disabled UEFI of my VM. The usage of the following DiskConfiguration section installs Win2K12 R2 correctly:

https://gist.github.com/schakko/d5df24a2aab89e5e7ed0

Dell XPS 15, Linux and HiDPI

A few weeks ago I bought a new notebook (Dell XPS 15, 15″, 512 GByte SSD, Core i7) for my after-work work and home usage. First of all: it is an awesome fast piece of hardware. Fedora 21 boots up in 3 seconds, Eclipse (STS) starts up in around 7 seconds. But it has some disadvantages regarding the hardware:

  • Having the laptop on the lap bends the case, randomly not releasing the buttons, see http://en.community.dell.com/support-forums/laptop/f/3518/t/19601453
  • At the beginning backspace and space key felt like already used. I must admit that I am using a mechanical keyboard at work and for my standalone PC at home, so every other rubber keyboard sucks 😉
  • Return key feels slightly too small at the beginning.
  • High pitching noise, probably coming from the touchscreen. Most of the time it occurs during scrolling through long documents and having CPU load. I am not sure why this happens.

Especially the problem with the non-releasable buttons drove me crazy at first because it seemed to occur randomly. After some days working with the notebook I accepted this failure. All in all it seems to be a very nice notebook for a developer like me, but…

… The HiDPI support for Linux software just sucks. Linus Torvald statement made his statement at the end of 2012 but the current state is still bad:

  • Default Chromium package has no support for HiDPI; buttons and menus have the wrong scaling. Firefox does support HiDPI and so I set it as my default browser.
  • Scaling of some GTK input fields (radio buttons, checkbox) is wrong, see https://bugzilla.mozilla.org/show_bug.cgi?id=975919
  • Using a second display (beamer) totally screws up the X server. I can’t  get a higher resolution than 800*600 when cloning both displays. Not sure, why this happens.
  • IntelliJ (including EAP 14), Eclipse (4.4) and Netbeans (8.x) are having wrong scaled icons. See wiki discussion for Eclipse at https://wiki.eclipse.org/Bug_421383_-_Graphics_Scaling_issues_on_high_DPI_displays

For a list of workarounds, the ArchWiki is the first place to look for.

Fixing gratuitous ARP requests

Due to some internal network problems I fired up Wireshark and saw a lot of gratuitous ARP requests/broadcasts. I had never seen the sending MAC or IP before but could assign it to one the ports our switching hardware. The designated port was used for a Citrix XenServer virtualization environment, so at first I suspected a miconfiguration of one of the bonds and some looping ARP packets. This assumption was wrong: I shutted down the server and the ARP requests still came from the physical network interface, so it could only be a problem/configuration of the interface itself.

I googled for “intel gratuitious ARP” and found the answer: the Intel NIC had an IPMI module and was sending announcements but the GUI was disabled.
Fixing the problem was easy. I ssh’ed into to the Citrix XenServer and used the ipmitool to disable the ARP sending mechanism:

modprobe ipmi_devintf; modprobe ipmi_si
ipmitool -d /dev/ipmi0 lan set 1 arp generate off

Second Hackcamp Wolfsburg – December 2014

Last Saturday our second Hackcamp Wolfsburg in 2014 took place. In the run-up to the Hackcamp I had suggested to use the NeosIT office as the event location. @stevenschwenke agreed to that and so I prepared our office on Friday evening. Before the event I expected a team programming session but in the end I explained (too?) much about the Spring Framework and showed samples, use cases and technical approaches to solve different problems with the framework.

Nevertheless it was an enjoyable circle consisting of Steven, Karsten, Sven, Nikolai, Daniel, Kevin, Tobse and me. Besides the usual software development topics we talked about TV series and net political issues. For lunch time we had ordered pizza and Steven bought a lot of juice and fruit. And certainly we had a lot of Club Mate available.

I am really looking forward to the next Hackcamp in 2015 – thank you for the participation and patience 😉

Mission accomplished: 17 weeks of Freeletics

Four month ago I decided to start Freeletics for gaining more power in preperation for bouldering and to gain back my sixpack I lost with 16. The first three weeks I had ongoing sore muscles: I did sports every day, switching between running, biking and Freeletics. Thankfully to my self-motivation and the fine weather I never thought about giving up.

After three weeks I tried to motivate some of my friends to join but my attempts were not successful and so I did almost every training on my own. Due to my flexible work time I scheduled most of the training sessions in the morning.

The first time I *really* sweared about Freeletics was during my first Kentauros session in mid September. We had almost still 30°C and I did the workout in the burning sun. I never sweated as much as I did until this workout.

A week later my first hell week started. Three workouts a day sounds like much but the two days pause between the hell days allowed me to regain my power.

After the hell week I changed my location from the parking area of VW Bad and Schillerteich to the parking area right in front of the new Vfl stadium. This place is lighted in the morning and there is enough space for doing sprint sessions. Another location I moved to was our office where I did most of the Hades and MAX sessions excluding Pull-Ups. That said I must admit that Pull-Ups are my nemesis.

One week before my final hell week started, my wife and I had flied to Teneriffa for a one week vacation. I had planned to prepare my hell week during the vacation and took my sport clothes with me. Unfortunately I got a bad cold after three days and so I had to pause the training for more than a week. Considered afterwards during the forced pause my body regained the power I lost in the weeks before and in most of the hellweek workouts I got PBs.

And then the hell week began. 12 workouts on 7 days. During the vacation my sleep pattern had dramatically changed and so I started the first hell week day on 3:30 am in the morning. During the rest of the week I had sleep deprivation. During the night I woke up and thought about the next workout. It was a crazy week with few sleep, only thinking about workouts, light lasting sore muscles and always being hungry. On monday morning at 8 am I started the last three workouts at the Schillerteich. It was gusty, around 3°C cold and I had to defeat Kronos in the first place. The Push-Ups, Situps, Squats and Leg Levers were easy, but …100 Pull-Ups? Half of the time of Kronos I spent doing the Pull-Ups. But it even got worse. After Kronos I had to do two Poseidons. In total 100 Push-Ups and another set of 100 Pull-Ups. My body was full of endorphins during the last 10 Pull-Ups and I finished my first 17 weeks Freeletics with a big smile.

In my opinion it was worth the effort. I don’t have any before/after images but I can assure that my body has visibly changed. All in all it was a crazy experience. I plan to do the MAX workouts during the winter and start again with Freeletics as soon as it is cozy and sunny.

Some new tools in our toolbox: Slack, JIRA for sales and marketing processes, Spring Data JPA, Justinmind

In the first days at work after my vacation I got in touch with some new tools and ideas which I want to share

Slack

We were searching for an internal chat solution for my former and current employee since years. Most of the self hosted chat solutions don’t have clients for the smartphone or don’t provide features like syntax highlighting of pasted code. Slack is a hosted chat, the provided free plan suffices our needs.

You might ask why the hell we need an internal chat, so let me explain it:

  • communicate with team members sitting directly at the customer
  • share ideas like images or presentations between the team
  • decrease the sound level in the office
  • don’t interrupt your coworkers so they must leave their “tunnel”

Additional to that we connected our JIRA instance to Slack so we receive issue changes from JIRA inside our project room inside the Slack chat.

JIRA for sales and marketing processes

In mid august a new coworker started in a position for sales and marketing. At this time we did not have decided which tool we want to use for supporting the sales and marketing processes. Our coworker responsible for JIRA administration built a new JIRA project which has different issue types for sales and marketing and maps the real process behind it to a JIRA workflow. The current status is visible on a JIRA Agile Kanban board. A really nice solution.

Spring Data JPA

A few months ago I found Lightadmin which dynamically generates administration web interfaces for Spring Data JPA entities without the need of writing any line of HTML. The project is really awesome: you get a CRUD administration interface for your Spring Data JPA entities with minimal effort.

The problem is that you can not easily customize the interface for the customer because this is not the target of the project. Because of this reason I decided to start a new project which adapts the techniques Lightadmin uses. But instead of generating the interface dynamically at runtime, the interface and backend code will be statically generated by Xtext. After the code generation the artifacts can be customized by our developers.

I am working on the project only for a few days and I am impressed what Spring Data JPA and it’s subprojects offer. I implemented a paginated list view with jQuery Datatables and a search for entities with Predicates / Specifications in five or six hours. Writing all the SQL/JQL code by hand would have kill me.

Justinmind

I am a really bad designer. From a technical point of view I know CSS, HTML and their friends really well  – but putting it together for getting a nice looking and intuitive interface is a race I will never ever win. I was glad when Twitter Bootstrap reached the light.

Whatever: Justinmind is a really nice tool for prototying interfaces. You can choose between different GUI components, bind them to events and fill it with test data. We are still in the phase of evaluating it, but this seems one of the best tools for easy prototyping. For a design-douche like me the tool is a revelation.

My four weeks summer vacation in 2014

Instead of the usual tech stuff I am writing I want to summarize my vacation. Jenny and I started our vacation on the same day. Our first week was consisted of finishing stuff we had lying around in the last months. I did a lot of running, have been bouldering two times in Braunschweig and canoed with one of my workmates.

In the second week we prepared our wedding ceremony. We had a lot of stress on thursday and friday because our supplier of dry ice had not received our order but we got an order confirmation. The dry ice was needed for the ice cream cake. In the end we got it managed and had an awesome ceremony in the Planetarium Wolfsburg. Our friend Sophie was a fantastic wedding speaker. After the ceremony we went to the Awilon: the food was excellent, our inaugural dance was really funny and we partied hard ’til sunday morning. The hangover on sunday was bad, but it was worth them. I was glad that a friend and other relatives of mine I havent seen for a few years joined our wedding day.

On monday in the third week we met again with my friend and his fiancee for dinner It was funny and we are looking forward to their wedding in the next year. A day later I started with sports again and began a new side project, too. The side project is written in old-school PHP and manages sport workouts. On friday I began the first Freeletics workout together with Julian. I was really relieved that my running and climbing sessions of the last months prepared me good enough and so the muscle hangover the next days kept within a limit.

In my last week I did only Freeletics with Tino and Thomas – Julian was unable to continue – and further work on my workout tool. The weather was – like the three weeks before – excellent. Most of the days it has been sunny which motivated me for sports or just relaxing outside.

Wrapping it up:

  • Finished watching Lost. NOW I understand the last season.
  • Prepared and cleaned up the Wolfsburger Ruderregatta
  • Ran 82 kilometers in the four weeks of vacation
  • Canoed on the Allersee with Timo
  • Made delicious cheeseburger with Bison meat
  • Watched Transformers 3 – worst movie for years
  • Watched Drachenzähmen leicht gemacht 1 & 2 – funny!
  • Will never order again ice cake and dry ice
  • Had an awesome wedding ceremony and wedding party with my wife, our family and friends
  • Met one of my friends again after eight years
  • Regained my motivation to do some programming in my spare time
  • Made a Spring MVC/REST architecture template
  • Started writing my workout app in PHP
  • Finished reading Marc Elsberg – Blackout
  • Finished reading Tom Hillenbrand – Drohnenland
  • Started reading Markus Orths – Alpha & Omega
  • Barbecued on some evenings
  • Got a sunburnt belly, brest, arms, legs – but only on the front 😉