Eine neue Zwiebelschicht

Es sind manchmal die kleinen Dinge, die einen auf die großen Probleme aufmerksam machen: Eine kleine, zusätzliche Bitte im “Projekt-Anbahnungsgespräch” zum Beispiel. Nichts wildes – nur eine freiwillige Angabe, die aber – wenn sie denn Schulung macht – in meinen Augen für alle IT Freiberufler in Deutschland dramatische Auswirkungen haben wird.

Was war geschehen?

Am gestrigen Tag habe ich eine Projektanfrage erhalten, die ich – wie immer – gerne beantwortet habe, mit allen relevanten Angaben wie Stundensatz, Verfügbarkeit und natürlich meinem aktuellen Profil. Es gibt nur ein paar unseriöse Firmen am Markt, bei denen es generell keine Reaktion von mir gibt – es sei denn, der angebotene Stundensatz ist derartig lächerlich (Yesterday’s Highlight: max. 40 €/Stunde, München), da schreib ich dann auch mal ein paar Zeilen zu und werde auch etwas pampig.

Das auf die Antwort zu einer Anfrage reagiert wird, ist in diesem Business leider zu einer Seltenheit geworden (obwohl der Projektanbieter den Erstkontakt hergestellt hat), umso erfreulicher war die prompte Reaktion des Anfragenden. Allerdings war ein kleines Formular beigefügt, das man doch bitte ausfüllen soll: Erst einmal die Frage, ob man denn freiberuflich tätig wäre oder doch lieber als Gesellschaft firmiert. Und ob man einen Nachweis hat, freiberuflich anerkannt zu sein. Oder schonmal von der Rentenversicherungsanstalt ein Überprüfungsverfahren hinter sich gebracht hat. Alle Angaben freiwillig, versteht sich.

Und das war der Moment, wo ich etwas stutzig wurde, und zum Telefonhörer griff: Man hätte da Probleme als Personalvermittler bekommen, und horrende Summen an die Rentenversicherungsanstalt nachzahlen dürfen, so der Mann am Telefon. Und man wolle da das Risiko im Vorfeld abklären, nicht das da eine Prüfung wegen Scheinselbständigkeit erfolgen würde. Wenn ich natürlich als Firma auftreten würde, und nicht als Freiberufler, würde sich das positiv in der Kandidatenauswahl für das Projekt auswirken…

Mal abgesehen von dem Umstand, dass ich darauf vorbereitet bin, und jederzeit meine Projekte durch eine Firma “durchschleusen” kann, um so dem Auftraggeber das Problem mit der Scheinselbständigkeit zu lösen, warum sollte ich das für eine Vermittlerfirma tun?

Nur mal kurz als Hintergrundinformation:

Scheinselbständigkeit ist, wer – grob formuliert – die Arbeit eines Festangestellten verrichtet, und wirtschaftlich vom Auftraggeber abhängig ist. Verhindert werden soll, dass Unternehmen ihre Mitarbeiter rauskegeln, als Selbständige wieder anstellen und so das Arbeitrecht aushebeln. Und natürlich sollen auch Sozialbeiträge erhalten bleiben. Soweit, so gut.

Doch die rechtliche Situation ist so unglaublich schwammig, denn es gibt hierbei nur Indizien, die entweder die Scheinselbständigkeit untermauern, oder eben das Gegenteil aufzeigen. Aber eben alles nur Indizien, und daher muss alles im Einzelfall geprüft werden. Eine Anerkennung als Freiberufler durch das Finanzamt hilft hier rechtlich nicht.

Rechtssicherheit sieht anders aus.

Daher sind Freiberufler wie ich generell Freiwild für Ansprüche wegen “angeblicher Scheinselbständigkeit”, und die erstrecken sich dabei auch auf Nachforderungen wegen nicht geleisteter Sozialabgaben. Und die muss dann auch der Auftraggeber bezahlen, also die Vermittlerfirma.

Nur als Beispiel: Wenn ich ein Haus baue, dann plant mir ein Architekt das Vorhaben. Es ist klar das seine Beschäftigung spätestens mit Abschluss des Bauvorhabens beendet ist, und auch während des Hausbaus ist es mir als Auftraggeber relativ egal, wieviele Kunden der Architekt neben mir so hat. Er ist also nicht an mich gebunden, und ich kann ihm keine Weisungen erteilen, wie er seinen Arbeitstag zu strukturieren oder wo er seine Arbeit zu verrichten hat. Es kann sein, dass der Bau meiner (leider fiktiven) Luxusvilla so unglaublich aufwendig ist, dass er – dank meines Auftrages – eine ganze Weile voll durch mich in Beschlag genommen wird, und daher jeden Monat seinen Rechnungen nur an mich schickt. Für den Moment ist er natürlich finanziell von mir abhängig, und auch auf dem Papier bin ich sein einziger Geldgeber. Doch ist er deswegen von mir fest angestellt, mit allen Rechten und Verpflichtungen? Natürlich nicht.

Gerade im Projektgeschäft, wo man durchaus für ein halbes oder ganzes Jahr in einem Kundenprojekt Vollzeit gebunden ist, macht es die Sache rechtlich sehr spannend, denn auf einmal ist man wirtschaftlich Abhängig von einem Auftraggeber und dadurch ein Kandidat für die Rentenversicherungsanstalt und deren Rechtsabteilung. Mittlerweile ist die Situation so absurd geworden, dass sogar Projekte im einzelnen bewertet werden: Das eine Projekt war freiberuflich, und das andere, ja da war man wohl in einem Angestelltenverhältnis.

Diese rechtliche Unsicherheit wurde bis heute nicht befriedigend gelöst, und daher haben Großunternehmen darauf reagiert und beschäftigen externe Fachkräfte nicht mehr direkt. Das Problem wurde auf diese Weise outgesourced, und nebenbei erspart sich das Großunternehmen den unnötigen administrativen Wasserkopf für die unterschiedlichen Verträge und Abrechnungsmodelle der einzelnen beschäftigten Externen. Den lukrativen Kanal zum Auftraggeber bezahlen die “Preferred Supplier” (aka Projektvermittler) sogar und überweisen den einen oder anderen Euro an das Großunternehmen (für Zertifizierungen und ähnliches), den sie später durch die Vermittlung natürlich wieder reinbekommen. Aus Sicht des Großunternehmens also eine nachvollziehbare Lösung, erhöht sie doch nebenbei den Shareholder Value. Und für den Projektvermittler natürlich eine herrliche Situation, mit Hilfe der Türsteherfunktion Druck auf die externen Ausüben zu können: Du kommst hier nicht rein. Nicht mit diesen Schuhen.

Die bisherige Schieflage soll jetzt wohl nocheinmal verstärkt werden: Bisher war es der Projektvermittler, der das “Scheinselbständigkeitsproblem” übertragen bekommen hat, und letztlich stellt es dessen Geschäftsmodell dar. Und nun wird versucht, das Problem an die Externen zu übertragen, aber natürlich ohne Gegenleistung. Als kleiner Nebeneffekt werden auch noch Haftungsrisiken durchgereicht, ohne das dies näher auffällt.

Gestern war es noch eine freiwillige Angabe. Aber ich befürchte, das es Praxis wird, denn irgendeiner wird das Spiel schon mitmachen. Und dann wird es schnell zur Standardbedingung.

Es beunruhigt mich, denn der Gesetzgeber hat hier ein Problem geschaffen, ohne eine Lösung anzubieten. Die Preise für externe Kräfte werden weiter in die Höhe getrieben, ohne dass der Auftraggeber einen Nutzen davon trägt. Und der Auftragnehmer erhält weniger, denn die einzelnen Zwiebelschichten der “Zwischenfirmen” müssen ja auch irgendwie finanziert werden. Und der Sinn des Ganzen erschießt sich mir auch nicht, ausser dass man die freiberufliche Dienstleistung im IT Sektor gesellschaftlich abschaffen möchte.

Ach, ein Merkmal des eingangs erwähnten Projektes ist übrigens, dass die “Einsäte nur sporadisch stattfinden”. Also ist es von vorneherein klar, dass hier keine Probleme mit der Rentenkasse entstehen können. Doch nachdem ich dem Projektanbieter mitgeteilt habe, dass ich in diesem Projekt nur als Freiberufler agieren werde, kam die prompte Antwort, dass man leider nur Kapitalgesellschaften akzeptieren und mich daher leider nicht berücksichtigen könne. Denn den “sogenannten Freelancer-Check” würde ich nicht bestehen.

Ich sehe rosige Zeiten auf die Branche zukommen…

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Krautreporter sind online

Das Warten hat ein Ende! Mit dem heutigen Tag ist das Krautreporter-Projekt endlich online gegangen. Ich bin gespannt, was sich aus diesem Versuch alles entwickelt.

Es ist erfrischend, das man beim Besuch der Seite nur auf einen einzigen Tracker stößt, und nicht wie bei manchen anderen Online-Magazinen die Ghostery-Warnungen die halbe Seite blockiert.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

MongoDB for Java Developers

Today I received the confirmation for successfully completing the “MongoDB for Java Developers” course:

Here is the link to verify the certificate.

Veröffentlicht unter MongoDB | Verschlagwortet mit | Hinterlasse einen Kommentar

XPages: Execute Events with HTTP Get

To execute an event on the server, you normally have to send a POST request, because actions will be executed in the Invoke Application phase of the JSF lifecycle. A GET request will only process the Restore View and the Render Response phase, that why you can not execute an event with a GET request.

But with the help of a PhaseListener, the execution can be done earlier in the Restore View phase:

package ch.hasselba.xpages.util;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import com.ibm.xsp.component.xp.XspEventHandler;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import com.ibm.xsp.util.FacesUtil;

public class ExecuteOnServerPhaseListener implements PhaseListener {

    private static final long serialVersionUID = 1L;

    public void beforePhase(PhaseEvent event) {}

    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }

    public void afterPhase(PhaseEvent event) {
        
        FacesContextExImpl = FacesContextExImpl.getCurrentInstance();
        ExternalContext ec = fc.getExternalContext();
        String url = ec.getRequestPathInfo();
        String[] pathes = url.split( "/" );
        
        try{
            if( pathes.length > 2 ){
                if( "executeOnServer".equals( pathes[pathes.length -2 ] ) ){
                    String[] fullId = pathes[ pathes.length - 1 ].split(":");
                    String actionId = fullId[ fullId.length - 1 ];
                    XspEventHandler eventHandler = (XspEventHandler)
                        FacesUtil.findComponentWithFullId( fc.getViewRoot(), actionId );
                    if( eventHandler != null ){
                        eventHandler.getAction().invoke( fc, null );
                        fc.responseComplete();
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }

}

To activate the PhaseListener, it has to be enabled in the faces-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config>
   <lifecycle>
      <phase-listener>ch.hasselba.xpages.util.ExecuteOnServerPhaseListener</phase-listener>
   </lifecycle>
</faces-config>

The following Javascript snippet extends the XSP object and adds the new function executeOnServerGet to it. The parameter is the if of the event to invoke.

XSP.executeOnServerGet = function( eventId ){
    var viewId = dojo.query('[name="$$viewid"]')[0].value;
    var url = document.forms[0].action;
    url += "/executeOnServer/" + eventId;
    url += "?$$viewid=" + viewId;
    url += "&$$ajaxid=@none";
    dojo.xhrGet({url: url});
}

When calling the function, it sends a GET request and adds the current view id to the request. With the parameter $$ajaxId set to @none, the XPages Engine is forced to send no HTML code back to the client.

And here is an example XPage:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:eventHandler id="helloworld" event="helloworld" submit="false">
        <xp:this.action>
            <![CDATA[#{javascript:
               print("hello world " + java.lang.System.currentTimeMillis() );
            }]]>
        </xp:this.action>
    </xp:eventHandler>


    <xp:scriptBlock id="scriptBlock1">
        <xp:this.value><![CDATA[
            dojo.addOnLoad( function(){
                XSP.executeOnServerGet = function( eventId ){
                      var viewId = dojo.query('[name="$$viewid"]')[0].value;
                    var url = document.forms[0].action;
                    url += "/executeOnServer/" + eventId;
                    url += "?$$viewid=" + viewId;
                    url += "&$$ajaxid=@none";
                    dojo.xhrGet({url: url});
                  }
            });
        ]]></xp:this.value>
    </xp:scriptBlock>
    
    <xp:button value="Execute" id="button1">
        <xp:eventHandler event="onclick" submit="false">
            <xp:this.script>
                <![CDATA[XSP.executeOnServerGet( "#{id:helloworld}" );]]>
            </xp:this.script>
        </xp:eventHandler>
    </xp:button>
</xp:view>

When clicking the button, the following URL is opened in the background:

http://example.com/db.nsf/EventGet.xsp/executeOnServer/view:_id1:helloworld?$$viewid=!dwjldz64w0!&$$ajaxid=@none

A GET request was sent to the server:If you look on the server console, you will see that the Action was invoked:

Veröffentlicht unter Dojo Toolkit, Java, Java Script, JSF, Performance, XPages, XSP | Verschlagwortet mit , , , , , , , , , , | 2 Kommentare

Apple: Ganz großes Kino!

image

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

To Dump Or Not To Dump

Die Firma GULP bietet ein neues “Feature”:

Stundensätze der anderen Bewerber auf ein Projekt werden in 10-Euro Schritten gut sichtbar auf der Online-Bewerbungsseite angezeigt. Eine interessante Neuerung, denn letztlich fördert es den Wettbewerb, die Angebote der Anderen noch ein wenig zu unterbieten. Dumping at it’s best.

Wenn ich mir allerdings den obigen Screenshot eines Projektes anschaue, sehe ich ein Angebot für 30€ oder weniger. Da frage ich mich schon, was dieser Quatsch eigentlich soll. Ist so etwas ernst gemeint? Und auch bei den “Unter 60€”-Kandidaten frage ich mich ernsthaft, wie deren Kalkulation aussieht?

Steuern? Rücklagen? Altersvorsorge? Wirtschaftliches Risiko?

Scheint keine Rolle bei diesen Zahlen zu spielen. Auch Themen wie Fortbildung, Urlaubszeiten, Krankheitsausfälle und die “nicht berechenbaren Aufwendungen” (wie z.B. die Buchhaltung, Akquisephasen usw.) sind hier wohl kaum in den Kalkulationen enthalten. Und dann noch die Befürchtung, als “Scheinselbstständig” eingestuft zu werden. Das alles für solche Dumping-Preise?

Aktuell liegt der Schnitt bei deutlich über 70€/Stunde für IT Freiberufler, alles andere ist doch totaler Quatsch: Geht euch ne Festanstellung suchen und macht den Markt nicht kaputt! Die Vermittler-Branche lacht sich ins Fäustchen und berechnet für Eure Arbeit mindestens 50% mehr. Für nichts und wieder nichts.

Und die Firmen erhalten billige Arbeitskräfte (gegenüber den teuren Festangestellten, die meistens mit deutlich über 100€/Stunde in Konzernen kalkuliert werden).

Im Lotus / Domino / IBM Notes – Markt ist es hart geworden: Von oben drücken die Firmen, deren Margen schmelzen, und von unten kommen die Dumping-Angebote überqualifizierter Freiberufler. Und dazwischen tummeln sich die Vermittler, die sich die Taschen füllen. Na denn, Prost Mahlzeit!

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Identifying Back Doors, Attack Points, and Surveillance Mechanisms in iOS Devices

Eine sehr interessante Präsentation von Jonathan Zdziarski: Identifying Back Doors, Attack Points, and Surveillance Mechanisms in iOS Devices

Overall, the otherwise great security of iOS has been
compromised… by Apple… by design.

Kommt mir irgendwie bekannt vor

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Ein bischen mehr Privatspähre

Nach dem Post von Julian Buss habe ich seinen Hinweis auf die Suchmaschine startpage.com angenommen, und letze Woche die Umstellung vollzogen.

Seit dem fehlt mir überraschenderweise nichts! Die Suchergebnisse stimmen, die Geschwindigkeit auch, und ich bemerke die Umstellung nur an dem anderen Seitenlayout.

Anfangs war es etwas nervig, dass die Suchergebnisse allesamt per POST übertragen werden, und dadurch die Browser-Historie leidet, aber nachdem ich mal die Konfiguration angepasst hatte, lief alles wie “immer”. Einzig bei der Sucherweiterung für Firefox habe ich Hand anlegen müssen, damit auch diese Suche per GET funktioniert. Um das hinzubekommen, habe ich die search.json mittels einem Texteditor angepasst.

Die Datei unter Windows zu finden im Verzeichnis

<USERDATA>\AppData\Roaming\Mozilla\Firefox\Profiles\<PROFIL ID>

unter Linux im Ordner

~\.mozilla\profiles\<PROFIL ID>

Der folgende Part…

[{"template":"https://startpage.com/do/search","rels":[],
"method":"POST","params":[{"name":"query","value":"{searchTerms}"},
{"name":"cat","value":"web"},{"name":"pl","value":"ff"},
{"name":"language","value":"deutsch"}]}]

muss durch diesen ersetzt werden (Änderungen hervorgehoben), dann läuft auch diese Suche wie gewünscht:

[{"template":"https://startpage.com/do/search","rels":[],
"method":"GET","params":[{"name":"q","value":"{searchTerms}"},
{"name":"cat","value":"web"},{"name":"pl","value":"ff"},
{"name":"language","value":"deutsch"}]}]

Ich nutze natürlich weiterhin Google-Dienste, nicht zuletzt auch wegen den eingesetzen Smartphones, aber es ist ein kleiner Schritt in die richtige Richtung.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Ich, der Extremist (3)

Node Nr. 2 ist jetzt auch am laufen. Die nächste Node wird eine Exit-Node, doch nach den Auswüchsen der letzten Zeit werde ich diese wohl 100% Anonym betreiben.

(Es dauert übrigens immer ein paar Tage, bis die “Endgeschwindigkeit” erreicht wird. Erst muss die Node als “Stable” eingestuft werden.)

Wenn jemand interesse verspürt, ebenfalls eine Node zu betreiben, kann sich gerne bei mir melden, ich helfe gerne bei den unterschiedlichen Szenarien. Node Nr. 2 läuft zum Beispiel auf einem Raspberry Pi, aber auch eine Fritzbox kann für stromsparend im Eigenheim als Basis dienen. Als Bandbreite benötigt man gerade einmal 20 KB/s, denn das wichtigste im TOR Netzwerk ist nicht die Geschwindigkeit, sondern die Zahl der verfügbaren Nodes: Je mehr davon, desto “unkontrollierbarer” ist das ganze Netz.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Gauchogate

Die Übersetzung des kleinen Liedchens findet sich hier: http://www.wm2014-in-brasilien.de/argentinien-invasion/7198/

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar