Regeländerungen 2019

28. Januar 2019

Alle Jahre wieder… kommen Regeländerungen.

Die im Bereich des AFVD verwendeten Regeln basieren auf den amerikanischen NCAA-Regeln, welche für Colleges gelten. Es ist üblich (wie auch bei der NFL), dass sich am Ende jeder Saison Vertreter aller Liga-Mitglieder zusammensetzen und die Saison rückblickend analysieren um das Regelwerk anzupassen.

Ein bekanntes Beispiel ist das Verbot bestimmter FaceMasks (sogenannte ‚BigGrill‘), nachdem medienwirksam halbe Ritterhelme zur Schau gestellt wurden und sich viele Leute Sorgen um die gesundheitlichen Auswirkungen dieser Gitter gemacht haben. In den letzten Jahren spielt die Gesundheit gerade in den USA eine große Rolle, weshalb es schnell zu einer klaren Richtlinie kam.

Solche Änderungen werden in Deutschland geprüft und meistens übernommen – hierbei kommt es dann jedoch zu einem Zeitversatz von fast einem Jahr… die Saisons liegen nunmal zeitlich versetzt.

Der American Football Verband Bayern hat aktuell eine sehr schöne Aufstellung der Änderungen im Jahr 2019 erstellt.

Manche dieser Änderungen treffen auf wenig Verständnis bei den Spielern. Bei den BigGrills sowie dieses Jahr bei den Kneepads dürfen wir Schiedsrichter bestimmt den ein oder anderen Dialog führen, warum das auf einmal so ist wie es ist…

Werbeanzeigen

WinForm: Tooltip for disabled Controls

25. Januar 2019

Today I’ve been struggeling to get a tooltip on a deactivated control. Normally if you set the property ‚Enabled‘ to False even the tooltips won’t work.

Thanks to Stackoverflor I’ve been able to get this working. Here is my code:

The parental container of the control needs an EventHandler to listen to the MouseMove-event:

AddHandler GroupBox_Settings_Folders.MouseMove, AddressOf GroupBox_Settings_Folders_MouseMove

There you track if the mouse hovers a disabled control and then retrieve it’s tooltip-text and finally force the tooltip to show up:
Private _CurrentControl As Control
Private Sub GroupBox_Settings_Folders_MouseMove(sender As Object, e As MouseEventArgs)
Dim ctrl As Control = GroupBox_Settings_Folders.GetChildAtPoint(e.Location)
If ctrl IsNot Nothing Then
If Not ctrl.Enabled AndAlso (_CurrentControl Is Nothing OrElse _CurrentControl.Name <> ctrl.Name) Then
If _CurrentControl IsNot Nothing AndAlso _CurrentControl.Name <> ctrl.Name Then
ToolTip.Hide(GroupBox_Settings_Folders)
End If
Dim tt As String = ToolTip.GetToolTip(ctrl)


If Not String.IsNullOrWhiteSpace(tt) Then
ToolTip.Show(tt, GroupBox_Settings_Folders, e.Location.X + 13, e.Location.Y + 13)
_CurrentControl = ctrl
End If
End If
Else
If _CurrentControl IsNot Nothing Then ToolTip.Hide(GroupBox_Settings_Folders)
_CurrentControl = Nothing
End If
End Sub


That’s all – works pretty fine for me.


Saison 2019 fängt langsam an

25. Januar 2019

Das Jahr ist noch jung, aber die Saison 2019 hat schon vor über einem Monat angefangen:

Aufgrund meines Umzuges in ein anderes Bundesland musste ich mir für 2019 einen neuen Landesverband suchen, da ich weiter meinem Hobby frönen möchte. Hierfür kamen nur Hessen oder Niedersachsen in frage. Eine Konsultation der Mitgliederliste der jeweiligen Verbände brachte schnell die Erkenntnis, dass für mich nur Niedersachsen in Frage käme – andernfalls wären die Fahrzeiten jenseits dem Ertragbaren.

Nun fing die Odyssee erst an: Kontakt zum Schiedsrichterobmann (SRO) aufnehmen und eine Anfrage stellen, wie es in Niedersachsen so läuft und ob er einen Verein kennt, der dringend einen Schiedsrichter braucht. Die Antwort kam zügig und war einfach: Alle brauchen dringend welche.

Nächster Schritt: Vereine anschreiben. Hier war mir nur wichtig, dass es NICHT die Göttingen Generals sind- schließlich möchte ich gerne oft dort pfeifen da sie nicht so weit weg sitzen wie alle anderen Vereine in Niedersachsen. Ein Kollege aus Berlin gab mir den Tipp, möglichst weit weg zu gucken, da man dort dann auch nicht angesetzt würde. Nach einigen Mails kam dann schnell eine erste Antwort: Nein, man braucht keine mehr. Damit hatte ich nicht gerechnet, aber okay. Weiter warten.

Als nach einigen Tagen keine Antwort kam, versuchte ich den Kontakt via Facebook – erstaunlicher Weise funktioniert das deutlich besser als die gute „alte“ E-Mail… kurz um: Es wurden die Lüneburg Razorbacks. (Auch wenn ich noch heute auf die Antwort des Vorstands warte, ob mit der Anmeldung alles geklappt hätte).

Letzter Schritt: Lizenz-Lehrgang buchen. Da kamen gleich viele Überraschungen auf einmal: Erster Schock war der Preis – fast 300 € sollte das Ganze kosten. In Berlin lagen die Gebühren bei ca. 90 €… schnell stellte sich aber heraus, dass sich der Betrag aus Essen, Trinken sowie einer Übernachtung im Hotel im Doppelzimmer zusammen setzt. Und es kam noch eine Art „Strafe“ für zu spätes Anmelden hinzu – möglicher Weise weil das Hotel da nicht so kulant sein kann.

Vor kurzem haben wir dann auch unsere E-Mails für die digitale Anmeldung zu den einzelnen Sessions erhalten – anders als in meinen bisherigen Lehrgängen werden alle Schiedsrichter mit Lizenz ab D gemeinsam ausgebildet. Es finden immer drei parallele Sessions/Vorträge statt, und je nach persönlicher Ausrichtung wählt man sich sein Vertiefungsgebiet zusammen. Für diejenigen z.B. die WhiteHat pfeifen möchten, gibt es obligatorische Kurse.

Schnell hatte ich meinen Plan zusammen, allerdings hätte ich gerne noch die ein oder andere Session mitgenommen, was aber nicht gepasst hat. Zu viel Inhalt in zu wenig Zeit. Auffällig war jetzt schon mal, dass der Lehrgang ziemlich an der Praxis orientiert ist bzw. sich viel auf die Mechanics konzentriert. Heißt dann wohl: Regeln lieber schon vorab in Eigenregie lernen.

Diese Diashow benötigt JavaScript.

Zu guter Letzt kam noch eine letzte Überraschung: Der vorläufige Zeitplan sieht am Ende des Wochenendes die Ausgabe von Funkgeräten vor. FUNKGERÄTE!! Bin sehr gespannt wie damit der Einsatz dann aussieht später – unter der Annahme, dass ich mindestens eine D-Lizenz schaffe 😉


Missing ConnectionString parameter in Entity Framework Constructor

15. März 2016

After working several years with LinQ2SQL and the DBContainer classes I recently switched over to Entity Framework.

When starting my new WebApplication project I compared LinQ2SQL, ADO.Net and EF6 with some possible database operations and finally decided to pick EF as it got the best results. (Details and my regrets may be following up on another blog post).

So when working with EF I also decided to place all files in a seperate project as I had to share the classes among several subprojects. Unfortunately this construct ends in not sharing application settings (app.config / web.config) so I was looking for some way to pass a connection string along with the constructor, as the web.config settings wouldn’t be recognized.

Thanks to StackOverflow and Google I found the most obvious:
The EF-context files inherit from DBContext which owns such an constructor. But the automated generated files lack of this constructor.

Blog_EF_001

So the obvious is (shame on me that I didn’t saw this in first place) to add the missing constructor by hand:

Blog_EF_002

But unfortunately this file is auto-generated – it will be overwritten each time you change something in the designer.

So to prevent the unwandet deletion of your manual constructor is easy if you know how: All you need is a partial class which simply adds the missing constructor:

Blog_EF_003

And that’s it… 🙂


Creating Documents with DirectSmile Crossmedia totally dynamical

11. März 2014

Today I would like to blog about creating dynamic documents with the new DirectSmile Crossmedia V6.

When talking about a ‚dynamic document‘ I mean a document whose content will be constructed on a dynamic way. For this blog I will allow the user to pick several chapters from a list and will get a PDF in return. So the final document will need to be build based on the users selection.

To achieve my goal I will first need a PURL which allows my user to pick several available chapters. Thisfor I will need the ‚MultiSelect‘ item from the extension items library.

So my basic PURL will require a firstname, a lastname and a selection of several chapters:

Simple setup for our PURL

Simple setup for our PURL

Creating a dynamic document which will be rendered as PDF requires a XML which we call DocML. This is a language which allows you to create documents just with a XML syntax. Please see the manual (Document and Composition XML Commands) for more details about DocML.

The multiple selection will be stored as a stringlist with pipes as delimeter. Next we will need to create a new ’scripted data relation‘ to generate the DocML which will generate our document based on the users selection.

So just add a new scripted datarelation and edit it to read from the current table row and split the string by ‚|‘:

A first setup for our data relation.

A first setup for our data relation.

As we now have all informations needed to set up our document we will start creating our XML. We will simply create new pages for every valid entry in our splitted string which contains only a single image referencing to a PDF file containing the selected chapter which I’ve uploaded to my template images before.

In case your chapters are longer than single pages you will need another database containing individual informations about each chapter so you can regard these in your JavaScript. But for our small example we simply assume that each chapter only consists of one single page.

Final DataRelation with full DocML result.

Final DataRelation with full DocML result.

Also we need a ButtonAction defined inside our DataRelation so that we can write the DocML to our database. Please recognize that I’ve also added a second condition (Mode ===‘ ButtonAction‘):

In the head section of the DataRelation we define a ButtonAction to trigger the write-2-db from outside.

In the head section of the DataRelation we define a ButtonAction to trigger the write-2-db from outside.

This ButtonAction needs to be assigned to our submit button on the PURL:

Assign the ButtonAction from the DataRelation to the submit button.

Assign the ButtonAction from the DataRelation to the submit button.

So after that we will only need to create a dummy document which needs to be web editable – this will allow us to render this document on our page but with our DocML as payload to overwrite the content with our dynamic one.

Configure the dummy document to pick the DocML from the correct database column

Configure the dummy document to pick the DocML from the correct database column

And finally we have all we want. We can now use this document to be rendered on a PURL, sent to the workflow or attached to an e-mail.

If you want to try this on your own please use the attached ZIP file to import this example campaign.

Finally to say: Many thanks to my dear colleague Wolfgang – without his work this article would not have been possible!


Creating random strings for a dummy table

23. Januar 2014

Today I worked on a JavaScript placed in a DirectSmile Crossmedia campaign, which is currently used for supporting auto-completion based on a list of entries coming from a DataRelation. The customer who uses this script asked if we could allow prefixes which will not being recognized by the auto-completion.

Well, sounded like a challenge – perfect for me as I like such things, challenge accepted! Before I could begin I had to get some dummy data… but how?

So I could just create an empty campaign, fill the database with dummy data I have to write on my own and then link it with a DataRelation to the real campaign.

This approach sounds like a plan – but on the other hand it sounds like a lot of manual work to do. And as software engineers are lazy by nature I had the idea for a slightly different approach:

With the latest release of DirectSmile CrossMedia a new feature has been introduced: Scripted DataRelations! This special DataRelation uses JavaScript to produce data. So all I had to do was create some JavaScript which will create my dummy string which fulfills my needs.

To create a random string in JavaScript all you need is a string with all wanted chars – in my case I separated the capital letters from the normal ones and placed them in two strings:

var possibleCapitals = „ABCDEFGHIJKLMNOPQRSTUVWXYZ“;

var possible = „abcdefghijklmnopqrstuvwxyz“;

Now you only need a random number between 0 and the length of each source-string:

for (var i = 0; i < 10; i++) {

randomString += possible.charAt(Math.floor(Math.random() * possible.length));

}

This will create you a random string with 10 characters. Could be enough for my needs but it could even be „fancier“ – using capitals in front of each cityname and different string lengths:

So I’ve added a random length variable with at least four characters and a maximum of 16:

var length = Math.floor(4 + Math.random() * 12);

And added this to my for-loop:

var possibleCapitals = „ABCDEFGHIJKLMNOPQRSTUVWXYZ“;

var possible = „abcdefghijklmnopqrstuvwxyz“;

var length = Math.floor(4 + Math.random() * 12);

var randomString = possibleCapital.charAt(Math.floor(Math.random() * possibleCapital.length));

for (var i = 0; i < length; i++) {

randomString += possible.charAt(Math.floor(Math.random() * possible.length));

}

Now I’ve got a nice function which will render me one single random string with a capital letter at the beginning. So all I needed to do now is to call this snippet of code a couple of times and add each string to my DataRelation output.

After adding a Scripting Relation…

Add a Scripting Relation

… in my campaign I’ve just copy & pasted the code from above to it’s editor…

Edit the data source

… and modified the section where the data is added to the „newRow“ variable:

if(Mode == „GetCount“)
{
    MyTable.ResultCount = 100;
}
else if(Mode == „LoadData“)
{
    var possibleCapitals = „ABCDEFGHIJKLMNOPQRSTUVWXYZ“;
    var possible = „abcdefghijklmnopqrstuvwxyz“;
    var tResult = “;
    for (var n = 0; n < 101; n++) {
        tResult = ‚NAV ‚ + possibleCapitals.charAt(Math.floor(Math.random() * possibleCapitals.length));
        var length = Math.floor(4 + Math.random() * 12);
        for (var j = 0; j < length; j++) {
            tResult += possible.charAt(Math.floor(Math.random() * possible.length));
        }
    var newRow = MyTable.AddRow();
    newRow.SetValue(„ID“, n);
    newRow.SetValue(1, tResult);
}
}
As you can see I’ve already placed my specific prefix to the random string variable („NAV „). And finally I had my data presented:
See the result
And finally I could begin my work on the auto-completion with the nearly correct values 🙂 Challenge won!!