IBM DOORS DXL: Zurücksetzen mehrere Werte auf ihre gebaselinte Version

Problem

Mehrere Werte in einem Current Modul sollen auf ihre Werte in der letzten Baseline zurückgesetze werden.

Ansatz

* Einlesen der letzen Baseline.
* Filterung der betroffenen Objekte
** Hier Bsp. h.newValue==”Internal” && h.attrName == “BB_Type” && h.author==”karpbjde” && h.date “”==”03/27/15 11:33:58″

Lösung

History h;
Module m = current;
Object o, baselineObject;

// Anstelle von getMostRecentBaseline(m) kann die Baseline auch definiert werden 
Baseline b = getMostRecentBaseline(m) 
Module mostRecentBaseline = load(m, b, false)

for baselineObject in mostRecentBaseline  do
{
  for h in baselineObject do
  {
    HistoryType hisType = h.type;

    if(hisType==modifyObject)
    {
	if(h.newValue=="Internal" && h.attrName == "BB_Type" && h.author=="karpbjde" && h.date ""=="03/27/15 11:33:58")
	{
           for o in m do
           {
             if(identifier(baselineObject) "" == identifier(o) "")
             {
                 print "Set " identifier(baselineObject) "\t" h.author "\t" h.date " to " h.oldValue "\n";
                 o."BB_Type" = h.oldValue;
                 break;
	      }
	    }
	}
      }
   }
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Anzahl der OLE Objekte in einem Modul

Problem

Die Anzahl der OLE Objekte in einem Modul soll ermittelt werden. Außerdem ermittelt das Skript noch welche Typen einer Enumeration “BB_TYPE” auftreten.

Ansatz

* Verwendung der Funktion oleCount (Ein Objekt kann im Objekt Text mehrere OLE Objekte haben).
* Verwendung einer Skip Liste (HashMap) um die Types zu ermitteln, die auftreten können (ein Type ist eine Attribut-Enumeration)

Lösung – Solution

int oleCountInModule=0;
int internalCount=0;
Skip typeCollection = create;


void checkOLEcount(Object o, string attributeName) 
{ 
    int n = oleCount(o.attributeName);
    oleCountInModule=oleCountInModule+n;
    

    if(n>0 && o."BB_Type" "" != "Internal" && o."BB_Type" "" != "ChangeHistory")
    {
       put(typeCollection , o."BB_Type" "", o."BB_Type" "")
    }

} 

Module m = current;
Object o;

for o in m do
{
	checkOLEcount(o, "Object Text") 
}

print "OLE Count in Module: " oleCountInModule " / davon " internalCount " internal\n";

for myIterator in typeCollection do 
{
   string keyValue = (string key(typeCollection ));
   string currentObject = "";

   if(find(typeCollection , keyValue, currentObject))
   {
       // Just put the column names here.. it will work
       print currentObject "\n"
   }
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM DOORS DXL: List all Files in File System Directory from folder / Dateien in Verzeichnis auflisten

Problem

In iteration through all files in a file system directory shall be performed.
Alle Dateien in einem Verzeichnis sollen aufgelistet werden

Ansatz – Approach

Iterate all files of a file System Directory.
Verwenden des directory Schlüsselwortes

Lösung – Solution

string x = "c:\\" 
string file 
for file in directory x do { 
   print file "\n" 
} 
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: OLE Objekte als Bild exportieren

Problem

Alle OLE Objekte eines Moduls sollen als Bild exportiert werden

Ansatz

Verwenden der exportPicture Funktion

Lösung

Module m = current;
Object o;
string attributeName="Object Text";
string baseFileName ="";

EmbeddedOleObject ole

for o in m do
{
    int i = 1 
    string errmess = null
    RichText rtf
    string s = richTextWithOle o.attributeName    
    i = 1
    for rtf in s do
    {
       if (rtf.isOle)
       {
	     baseFileName = identifier(o) "";
           ole = rtf.getEmbeddedOle
           string filename = baseFileName "-rtfloop-" i ".png"
           print "Exporting " filename "\n" 
           errmess = exportPicture(ole,filename  , formatPNG)  
           if (!null errmess)
           {
               print "ERROR: " errmess "\n"   
           }  
        i++
       }   
    }
}

Bei Verwendung dieses Patterns können die Objekte auch wieder so importiert werden:

#include "\\\\bbmag2k\\exchange\\doors\\dxl\\strings.inc";       

Module m = current;
Object o;

string x = "h:\\pics" 
string file 
for file in directory x do { 
   if(matches("IDS-", file))
   {
      string objectIdentifier=file[0:indexOfFrom(file,"-",2)-1] "";
      string aufkommen=replace(file[lastIndexOf(file,"-")+1:length(file)], ".png", "") "";
      print objectIdentifier " " aufkommen "\n";
      // oleInsert
   }
} 
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Automatisch Links erstellen / erzeugen

Problem

Ein Kollege hat die Links in ein Kommentarfeld geschrieben. Diese Links sollen nun automatisiert ausgelesen und erstellt werden.

Ansatz

Zwei verschachtelte Schleifen
– Schleife 1: Sucht nacht Kommentaren und nutzt sie als Object Identifier
– Schleife 2: Sucht das Objekt im zu verlinkendem Modul

Lösung


// trim() used... 
// String Functions: http://www.capri-soft.de/blog/?p=832
#include "\\\\bbmag2k\\exchange\\doors\\dxl\\strings.inc";       		

Module m = current;
Module crs = read("/MultiProductData/30 Component/COMP-LA/CRS-LA",true);
current = m;

Object o,o2;
Link newLink;

for o in m do
{
 string toObject = o."BB_Comments" "";

 if (trim(toObject)!="")
 {
  for o2 in crs do 
  {
    if(identifier(o2) "" == toObject)
    {
      print identifier(o) " -> " toObject "\n";
      newLink = o -> "/MultiProductData/90 Administration/Specifies" -> o2;
    }
  }
 }
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

Zauberwürfel / 4x4x4 Rubiks Cube lösen + Sonderfälle

Algorithmus

  1. Erschaffe einfarbige Centersteine (die 4 in der Mitte) für jede Seite
    1. Achte besonders darauf, dass wie beim normalen Rubiks Cube weiß oben und gelb unten ist (da die Centersteine im Gegensatz zum 3x3x3 Cube beweglich sind).
    2. Als nächstes pass gut auf, dass die Farben zu den Ecksteinen an der richtigen Position sind. <– nach links drehen RGOB (Richtig Geil Oder Björn?). Bei Cubes, die nicht original von Rubiks sind, können diese Farben auch andere sein. Hier ist es wichtig darauf zu achten, dass die Ecksteine stimmen.
      merksatz_cube
  2. Erschaffe einfarbige Kantenpaare rund um den Würfel.
    1. Dafür müssen die einfarbigen Centersteine aber bereits an den richtigen Stellen erzeugt worden sein.
    2. Erzeuge ein Kantenpaar, indem der Würfel in der Mitte (also r und R) nach oben gedreht ein vollständig einfarbiges Kantenpaar ergibt und drehe das Kantenpaar nach rechts (oder links) 90° weg. Suche auf der Seite ein unvollständiges Kantenpaar und drehe es auf die Position, so dass das neu erzeugte “in Sicherheit” ist. Drehe das unvollständige wieder nach oben und drehe den Würfel in der Mitte wieder zurück, so dass die Centersteine wieder vollständig sind. (also r’ und R’).
    3. Sollte ein Kantenpaar übrig bleiben (das passiert nicht immser) siehe den Move “Letztes Kantenpaar tauschen” im Screenshot unten.img096
  3. Nachdem alle Kantenpaare erzeugt sind kann die Methode des 3x3x3 Rubiks Cube angewendet werden, indem man so tut, als seien die mittleren Steine im 4x4x4 Cube ein Stein in der Mitte des 3x3x3 Cube.
  4. Zum Schluss können (müssen aber nicht) diverse Sonderfälle auftreten. Man hat hier die Möglichkeit einige sehr lange Moves auswendig zu lernen, oder den Würfel zu verdrehen und neu zu lösen in der Hoffnung, dass sie nicht wieder auftreten. Einige dieser Sonderfälle (auch PARITY Errors genannt) sind:
    1. Ein Kantenpaar vertauscht
    2. Zwei Kantenpaare vertauscht
    3. Ecksteine vertauscht

img095img097img098

 

Die 3 häufigsten Parity Fehler (am Schluss)

Zwei gegenüberliegende Kantepaare vertauscht

Anmerkung: Die anderen Moves münden oft in dieser Ausgangssituation (also lohnt es sich auf jeden Fall den Move zu lernen).

 

 

 

wpid-wp-1424703572007.jpg

2 gegenüberliegende Ecksteine vertauscht

Siehe Screenshot oben (letzter Move mit blauer Kullitinte). Dieser Move endet oft in der Situation, dass 2 gegenüberliegende Kantensteine vertauscht sind. Diese Situation mit dem Algorithmus “2 gegenüberliegende Kantensteine vertauscht” lösen (siehe oben).

Ein einziges Kantenpaar übrig und vertauscht

Der wohl  längste und fieseste aller Algorithmen des 4x4x4 Cubes.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Zauberwürfel / 3x3x3 Rubiks Cube lösen

Problem

Es wird eine Lösungsmethode gesucht, mit der man den Rubiks Cube / Zauberwürfel kann.

Ansatz

Der Würfel wird von einer Bezugsfarbe (hier weiß) Ebene-für-Ebene mit sogenannten Moves gelöst. Jeder Move besteht aus einer Reihenfolge von Drehungen von einem Bezugspunkt aus und kann nur angewandt werden, wenn er in der richtigen Ebene für den richtigen Zweck eingesetzt wird, damit gelöste Ebenen nicht zerstört werden.

Der vorgestellte Algorithmus besteht aus den folgenden Punkten

  1. Erstellen eines weißen Kreuzes mit passenden Mittelsteinen auf der zweiten Ebene
    1. Weiße Kantenstücke auf die gegenüberliegende Seite des weißen Mittelstücks drehen (die weißen Seiten der Kantenstücke zeigen in die entgegengesetzte Richtung des weißen Mittelstücks)
    2. Dritte Ebene / Transportebene so drehen, dass ein Mittelstück zu der Farbe des Kantenstückes passt
    3. Komplette Seite um 180 Grad drehen, so dass das weiße Kantenstück mit der passenden Mittelstückfarbe neben dem weißen Mittelstück ist.
    4. Schritte B und C wiederholen, bis ein weißes Kreuz entsteht
  2. Lösen der ersten Ebene (Eckstücke zum weißen Kreuz richtig einordnen)
    1. Move: Hamburger-Move sortiert die weißen Eckstücke der ersten Ebene ein
  3. Lösen der zweiten Ebene (richtiges Einordnen der mittleren Kanten)
    1. Move: Auto-Move sortiert die Kantenstücke auf der zweiten Ebene ein
  4. Lösen der dritten Ebene / Transportebene
    1. Stab-Move: erzeugt eine gelbe Ecke, einen Stab oder eine Figur. Beispiele für Figuren sind Kreuz, Acht, Fisch, Space Invader
      figuren
    2. Fisch-Move: erzeugt einen Fisch aus einer Figur und anschließend eine komplett gelbe Seite
    3. Der Lurchi-Riecht-Richtig-Lausig-Move: Rotiert die Kantenstücke der dritten Ebene, das Teil gegen das man schaut bleibt erhalten
    4. Der Telefon-Move: Lässt die Eckstücke rotieren, das Stück links oben bleibt erhalten

Lösung

Der Aufbau des Würfels

Der Algorithmus

Vorbereitung: Das weiße Kreuz

Der Hamburger Move – Erste Ebene lösen

Zweite Ebene mit dem Auto-Move lösen

Der Stabmove (und Auswirkungen Fisch-Move)

Der Stabmove ergibt eine Figur (siehe die 5 rechten Abbildungen Space Invader, Kreuz und “Die 8″), wobei es immer darauf ankommt, wie man die Figur hält, bevor man den Fisch-Move anwendet. Das Resultat des Fisch-Moves auf eine der genannten Figuren ist immer ein Fisch. Der Fisch schaut einen immer an (siehe die beiden Figuren unten links) und hat das Auge auf der linken oder rechten Seite, was dann auch die Entscheidung gibt, ob der Fisch-Move mit links oder rechts ausgeführt wird. Danach ist die Fläche gelb.

 

 

wpid-20150223_163400.jpg

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Projekt Fahrgemeinschaftsbörse

Ausgangssituation

Der Zusammenschluss mehrerer Personen zu einer Fahrgemeinschaft mit gemeinsamen Zielort wirft jeden Morgen die Frage nach der gerechten Fahrten-Verteilung unter den Teilnehmern auf.

  • Wer nimmt heute an der Fahrt teil?
  • Ist die Teilnehmerzahl für eine Autofahrt zu hoch ( >5 Personen) ?
  • Wer ist heute mit dem Fahren dran?
  • Benötigt heute jemand ein Auto und muss deswegen ungeachtet einer vorbestimmten Reihenfolge fahren?
  • Wie behält man bei Ausfällen (z.B. Urlaub, Dienstreisen, Krankheit) von Personen eine gerechte Reihenfolge unter Berücksichtigung der vorherigen Fahrten bei?
  • Wie geht man fair mit der Situation um, dass aufgrund schwankender Teilnehmerzahlen bestimmte Mitglieder schlechter besetzte Fahrten durchführen müssen?

Definition der Projektziele

  • Minimierung des Koordinationsaufwands zwischen den Teilnehmern der Fahrgemeinschaft.
  • Definition eines fairen Rechenmodells für die Punkteverteilung an die Fahrgemeinschaftsmitglieder
    • nicht kostenorientiertes, geldloses Rechenmodell
    • rein auf den Personentransport bezogen

Zielgruppe

Die angestrebten Nutznießer des Projektes sind vorwiegend Berufspendler und weitere Personen, die an der häufigen Inanspruchnahme einer Fahrgemeinschaft zu einem bestimmten Zielort, oder einer Teilstrecke interessiert sind.

Intention

Die Teilnehmer haben als Ziel die Minimierung ihrer Kraftstoff- und Kraftfahrzeugkosten und/oder ein Interesse den Schadstoffausstoß nachhaltig zu reduzieren.

Voraussetzungen und Prämissen

Die Teilnehmer…

  • gehen den Kompromiss geregelter Abfahrtszeiten ein
  • können sich arrangieren und gemeinsame Treffpunkte/Parkplätze finden
  • haben ähnliche/gleiche Arbeitszeiten und/oder ein Arbeitszeitmodell (Gleitzeit), dass eine flexible Arbeitszeitgestaltung im Sinne der Fahrgemeinschaftsteilnehmer erlaubt.

Systemidee

Es wird ein mobilfähiges, webbasiertes Fahrgemeinschaftsportal geschaffen, dass das Gründen, Finden und Verwalten von Fahrgemeinschaften ermöglicht.

Das Herzstück der Anwendung ist ein punktebasiertes Rechenmodell, welches die Fahrerreihenfolge anhand der individuell erbrachten Vorleistungen/Fahrten der Fahrgemeinschaftsmitglieder bestimmt.

Feature Liste / Anwendungsfälle

Das System muss dem Benutzer die Möglichkeit bieten …

  • Benutzer registrieren
  • Benutzer per eMail freischalten
  • Benutzerlogin
  • Fahrgemeinschaft gründen
  • Fahrgemeinschaft suchen
  • Fahrgemeinschaft beitreten (evtl. über Freundschaftsanfrage)
  • Teilnehmer anlegen
  • Teilnehmer suchen
  • Teilnehmer löschen
  • Strecke suchen
  • Strecke anlegen
  • Strecke löschen
  • Treffpunkt suchen
  • Treffpunkt anlegen
  • Treffpunkt löschen
  • Fahrt anlegen
  • Fahrt nachtragen (für ein Datum)
  • Fahrt editieren (für ein Datum)
  • Fairnessausgleich, wenn ein Benutzer öfter die Fahrten mit wenigen Teilnehmern erwischt.

Anforderungen

Ein Benutzer registriert sich bei der Fahrgemeinschaftsanwendung. Nachdem er seine Login-Daten per eMail erhalten hat, kann er sich im System einloggen.

Der Benutzer sucht nach Fahrgemeinschaften und kann diesen eine Freundschaftsanfrage senden, die durch den Fahrgemeinschaftsadministrator freigegeben wird.

Wenn die Freundschaftsanfrage vom Fahrgemeinschaftsadministrator genehmigt wurde, hat der Benutzer Zugriff auf die Strecke / die Strecken, die von der Fahrgemeinschaft angelegt wurden, und kann auf diesen Strecken teilnehmen.

Der Benutzer hat die Möglichkeit eine eigene Fahrgemeinschaft zu gründen, wenn für seine Strecken noch kein passender Eintrag existiert.

Eine Fahrgemeinschaft hat mindestens eine Strecke, die von einem Starttreffpunkt zu einem Zieltreffpunkt definiert ist.

Der Starttreffpunkt hat eine festgelegte Abfahrtszeit, der Zieltreffpunkt eine festgelegte Ankunftszeit.

Eine Fahrt findet zu einem Datum auf einer Strecke statt. Eine Fahrt besteht aus mindestens 2 Teilnehmern.

Ein Teilnehmer besitzt ein Punktekonto an einer Strecke, welches bei der Teilnahme als Nicht-Fahrer um einen Punkt (Streckenkonto = Streckenkonto – 1) reduziert wird.

Wenn der Teilnehmer als Fahrer ausgewählt wurde oder sich selbst anbietet, wird sein Punktekonto um die Anzahl der Mitfahrer erhöht (Streckenkonto = Streckenkonto + Anzahl d. Mitfahrer).

Wenn die Teilnehmerzahl die Transportkapazität einer Fahrt übersteigt, können mehrere Teilnehmer als Fahrer fungieren, die jeweils die Punkte gutgeschrieben bekommen, die der mitgenommenen Teilnehmerzahl entsprechen. Die Teilnehmer teilen die Fahrten dann selbständig auf.

Ein Punktekonto an einer Strecke kann unter Berücksichtigung der Plausibilität korrigiert werden, allerdings wird die Historie von Korrekturen namentlich und chronologisch vermerkt. Alte Einträge zu einem Datum werden also lediglich auf obsolet gesetzt, so dass die vollständige Historie erhalten bleibt.

Ein neuer Teilnehmer steigt in eine Strecke mit einem Punktestand von 0 Punkten ein, so dass die Summe aller Fahrten auf einer Strecke immer 0 ergibt.

Wenn ein Teilnehmer von einer Strecke entfernt wird, werden seine Fahrten durch die Anzahl der Teilnehmer geteilt und den übrigen Teilnehmern zugeordnet, so dass die Summe aller Fahrten auf einer Strecke wieder 0 ergibt.

Fairnessausgleich

Am Ende des Monats erfolgt ein Fairnessausgleich, der dazu dient, die Fahrten mit wenigen Teilnehmern auszugleichen. Hintergrund dieses Ausgleiches sind Beschwerden der einzelnen Teilnehmer über mangelnde Teilnahme an den Fahrten, die selbst angeboten werden:
fairnessausgleich

Maskenentwürfe

tbd

Datenbankmodellierung als EER Diagramm

ER_Fahrgemeinschaft

Download: MySQL Workbench 2.6: Fahrgemeinschaftsmodell
Download: SQL_Skript

Anwendungsarchitektur als UML Klassendiagramm

UML_Fahrgemeinschaftstool

 

Diagramm StarUML2 Download: Fahrgemeinschaft_2014_12_25

Ergebnis

Screenshots

wpid-screenshot_2015-01-25-19-08-54.png wpid-screenshot_2015-01-25-19-09-17.png wpid-screenshot_2015-01-25-19-09-56.pngwpid-screenshot_2015-01-25-19-09-36.pngwpid-screenshot_2015-01-25-19-10-24.png   wpid-screenshot_2015-01-25-19-10-11.png

Live Demo

Benutzer: test
Passwort: test

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Gängige Mobilfunkstandards, Modulationsarten und Komprimierungsverfahren.

Was ist GSM?

Ist der 2G-Mobilfunkstandard, der hauptsächlich für Telefonie, aber auch für leitungsvermittelte und paketvermittelte Datenübertragung sowie Kurzmitteilungen (Short Messages) genutzt wird. Es ist der erste Standard der sogenannten zweiten Generation (2G) als Nachfolger der analogen Systeme der ersten Generation (in Deutschland: A-Netz, B-Netz und C-Netz) und ist der weltweit am meisten verbreitete Mobilfunk-Standard.

Was ist GPRS?

General Packet Radio Service (GPRS) (deutsch: „Allgemeiner paketorientierter Funkdienst“) ist die Bezeichnung für den paketorientierten Dienst zur Datenübertragung in GSM-Netzen.

Was ist UMTS?

Das Universal Mobile Telecommunications System (UMTS) ist der 3G-Mobilfunkstandard der dritten Generation (3G)

Was ist HSDPA?

High Speed Downlink Packet Access (HSDPA, 3.5G, 3G+ oder UMTS-Broadband) ist ein Datenübertragungsverfahren des Mobilfunkstandards UMTS.

Was ist LTE?

Warum ist LTE schneller als seine Vorgänger?

Laut http://www.elektronik-kompendium.de/sites/kom/1301051.htm

bessere Modulationsverfahren, flexiblere Frequenznutzung und größere Kanalbandbreiten

Resultiert eine flexiblere Frequenzausnutzung nicht in größeren Kanalbandbreiten, da die Kanäle mehr Platz haben?

UMTS ist eine Modulationsart?

 

 

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Abnehmen mit Subways, Burger King oder Mc Donalds?

3 Menübausteine bei allen Vergleichen:

1.) Ein Italian B.M.T. volle Länge (ohne extra Käse und extra Bacon) hat 1012kcal.


Produkt          Italian B.M.T. || Big King XXL
=====================================================
Nährwertangaben: pro 30cm       || pro Burger
Energie 	 4234 kJ        || 3948 kJ
                 1012 kcal      || 950  kcal
Eiweiß 	         45,6 g         || 52,1 g
Kohlenhydrat 	 78,2 g         || 46,0 g
Fett 	         52,6 g         || 58,2 g

2.) Eine Packung Chips von Walkers 178kcal
(Cookies werden sogar mit 222 kcal/Stk. angegeben)


Produkt          Walker Chips   || King Pommes 
=====================================================
1 Packung (34 g)                ||  Portion
Energie          747 kJ         || 
                 178 kcal (222) ||  388 kcal (groß) / 317 kcal (mittel) / 202 kcal (klein)
Protein          2,2 g          ||
Kohlenhydrate    17 g           ||
Fett             11,2 g         ||

3.) Ein Getränk


Nestea 500 ml: 195.00 kcal
Coca Cola 500 ml: 220.00 kcal

Fazit Subways:

Zwischen 1385 kcal (Nestea+Chips) und 1454 kcal (Cola+Cookies) liegt ein Italian B.M.T. Menü von Subways.

Das entspricht knapp unter 75 Prozent des empfohlenen Tageskalorienbedarfs eines erwachsenen Menschen.

Fazit Burger King:

Mit großen Pommes und Cola ca. 1558 kcal.
Mit Mayonaise/Pommes Frites (56 kcal) sauce: 1614 kcal

Das entspricht knapp über 75 Prozent des empfohlenen Tageskalorienbedarfs eines erwachsenen Menschen.

Man(n) würde 295 Minuten aktiven Sex benötigen um das abzubauen oder müsste auf 3 Stück Schokoladentorte verzichten (siehe http://www.shape.de/tools/kalorien-rechner.html)

Burger King

Vergleich Mc Donalds Menü:

Mc Donalds Big Mac 25 g Fett, 8 g Zucker: 495 kcal
Mc. Donalds Pommes (groß):  470 kcal
Coca Cola 500 ml: 220 kcal
Mayonäse: 60 kcal

1247 kcal

Also:

Zum Abnehmen eignet sich am Besten ein Mc Donalds Big Mac Menü mit Cola 500ml und Pommes mit Mayo (groß)

q.e.d.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar