3 ways to create javascript popup boxes

Problem

Sometimes it is eligible to have a way to easily create a browser prompt / confirm dialog / Textinput without defining a Popup DIV and catch those inputs.

Premise

The code thread will be interrupted and a modal browser window dialog will be shown

Solution

Veröffentlicht unter HTML/CSS, Javascript, Programmierung | Schreib einen Kommentar

IBM Doors DXL: Send email via Doors Client

Problem

Emails should be send via DXL script.

Prerequirements

The Doors Client should have access to a SMTP Server on it’s configured port (normally 25)

Right-click the doors database icon in the database explorer and make the following setttings:

Solution

string smtpServer = getDatabaseMailServer();
string smtpFrom = "Superman";
string smtpFrom2 = getDatabaseMailServerAccount();
string smtpTo = "bjoern.karpenstein@test.com";
string smtpSubject = "test";
string smtpMessage = "this is a test";

print "Mail Server Name: " smtpServer "\n";
print "Mail from account: " smtpFrom2 "\n\n";
bool b = sendEMailNotification(smtpFrom, smtpTo, smtpSubject, smtpMessage);

if (b) {
   print "Message sent\n";
} else {
   print "Could not send message.\n";
}
Veröffentlicht unter DXL, IBM DOORS | Verschlagwortet mit , , , | Schreib einen Kommentar

Microsoft Internet Information Server 7 / IIS 7: File Sharing on the website folder only for authorized people but allow / grant the IIS User / IIS worker process to execute ASP.NET

Problem

The SMB Mount / File Share for the web folders directory should be accessible for the admins but not for unauthorized people 

After setting the File Sharing permissions to that, the web applications shows HTTP error code 500 what means that the Microsoft IIS worker process does not have enough privileges.

Approach

To ensure, that the Microsoft IIS Server worker process has enough privileges to execute ASP.NET in the Directory and to prevent unauthorized access to the SMB Mount of the web application,the following settings should be applied

  • Add the user „Network share“ with Read/Write permissions to the folders directory
  • Configure the Application Pools identity to „Network Service“

Solution

Setting up the IIS web site folder to allow the user „NETWORK SERVICE“ to execute the IIS worker process
  • Connect to the web server via Remote Desktop Connection (RDP)
  • Right-click the folder
  • Select the tab sharing and click on the button „Share“
  • Search for user „Network Service“ and press the add button
  • Set the Permission Level „Read/Write“ to the user „Network Service“
  • Hit the apply button

Set up the application pools identity
  • Open the Microsoft IIS Server Manager
  • Select „Application Pools“ from the left side bar
  • Select the appropriate application / pool entry
  • Select „Set Application Pool Defaults“ from the right side bar
  • Search the Entry „Identity“ and press the „…“ Selector Button on the right side
  • Set the Identity to „Network Service“ to allow that user to execute ASP.NET as default user
Veröffentlicht unter Microsoft IIS Server | Verschlagwortet mit , , , , , | Schreib einen Kommentar

Javascript Implementierung der 2D Color Graphs von Savyon

Hier ist eine Javascript-Implementierung der 2D Color Graphs von Timo Krotzky.

http://www.savyon.de/?cid=codeblog

Veröffentlicht unter HTML/CSS, Javascript | Schreib einen Kommentar

Aufbau und Betrieb eines Informationssicherheitsmanagementsystems (ISMS) für KRITIS-Betreiber

Problem

Alle KRITIS-Betreiber müssen seit 30.6.2019 laut IT-Sicherheitsgesetz alle 2 Jahren dem „Bundesamt für Sicherheit in der Informationstechnik“ die Unbedenklichkeit Ihrer IT Infrastruktur nachweisen. Im Zuge dessen können diese eine prüfende Stelle (interne Revision / externe Beratungsgesellschaft) beauftragen, welche die Maßnahmen des bspw. ISMS auditiert.

Ansatz

Um den Aufbau eines ISMS zu erleichtern bietet sich die folgende Vorgehensweise an:

Veröffentlicht unter Allgemein | Schreib einen Kommentar

Meine Aufgabe heute: Erklären Sie das Arrangement von Bohemian Rhapsody am Beispiel des Bieres

Aufgabenstellung

Ein Bekannter von mir gab mir die Aufgabe das Arrangements von Bohemian Rhapsody exemplarisch anhand des Bieres zu erklären.

Ansatz – Approach

  • Analyse des Originals
  • Bestimmung des Zielkanals –> YouTube
  • Heraushören des Arrangements des Originals
    • Intro
    • Ballade
    • Solo
    • Opernteil
    • Hardrockteil
    • Outro
  • Heraushören der einzelnen Instrumentenspuren
  • Einrichten der DAW in Form eines Cubase-Projektes
    • Programmierung der MIDI Instrumente
      • Klavier
      • Schlagzeug
    • Festlegung der Tempospur
      • 72 bpm
      • 137 bpm
      • 90 – 60 bpm
    • Aufnahme der Audiospuren
      • Bass
      • Solo-Gitarren
      • Riff-Gitarren
      • Gesangsspuren
    • Home-Mixing und -Mastering der Spuren
    • Ausleitung als WAV-Datei
  • Einrichtung eines Video-Editor-Projektes
    • Aufnahme von Handy-Videospuren vor einer Greenwall (Galaxy S9)
    • Schnitt und Arrangement der Videospuren
    • Produzieren des Videos
  • Upload zu YouTube

Lösung – Solution

tempospur.PNG
Die Tempospur zeigt die unterschiedlichen Tempos zwischen 72 bpm, 137 bpm und dem langsamer werdenden Ende (von 92 bpm bis 63 bpm)
Intro
=====
 Ist es ein Bierchen
 in meiner Fantasie
 Und macht mich sehr breit
 König der Hydrologie
 Führ es zum Hals
 Fühl das Gerstenmalz
 und zieeeeeeeeeeh
 Ich brauch nur Bierchen
 ich brauch keine Sympathie
 Weils wie Wasser läuft
 sich gut säuft
 bisschen viel
 schönes Spiel
 Doch dort wo das Bier fließt
 ist mir das egal - ich wills ich wills
 Papa killte ein Pils
 setztes an und trank es leer
 und nun hab ich keines mehr

Balladenteil
============
 Papa ich hatt' so nen Durst
 doch scheinbar war dir der jetz völlig Wurst
 Papa uhuuuhuuuu
 Ich wollte ein Bier
 doch du vernichtest es zu schnell
 was soll das
 lass es doch - lass es doch
 ich will doch nur auch eins1
 Zu spät schon alles leer
 ich geh schiffen in das Meer
 völlig durstig es ist schwer
 Machts gut Saufkumpanen
 ich muss jetzt gehen
 lass euch hinter mir zurück
 denn die Pflicht die ruft
 Papa uhuuhuuuuu
 ich such noch ein Bier
 Manchmal wünscht ich ich wär nie geboren

Soloteil
========
(Solo)

Opernteil
=========
 Ich sah die Silhouette einer Flasche
 geh schnell hin
 trink sie aus
 bevor sie bald weg ist
 denn wenn sie dann weg ist
 hast du keines mehr - oje
 Ich bin schneller, Ich bin schneller,
 Ich bin schneller, Ich bin schneller,
 Ich bin als du - gib mir das Pils
 Ich bin ein armer Mann ständig such ich Bier
 Er ist ein armer Mann ständig sucht er Bier
 doch keiner gibt ihm mal ein Bierchen schnelll her
 Helles Pils - dunkles Pils
 ich trink es was solls
 Er trinkt was solls
 und darauf ist er stolz
 lass ihn ruhig
 Er trinkt was solls
 und darauf ist er stolz
 lass ihn ruhig
 und darauf ist er stolz
 lass ihn ruhig
 Bier, Bier, Bier, Bier, Bier, Bier, Bier
 Die Pizzaria Mama Mia Pizzaria hat schon zu
 Der Belzebub, macht Heißhunger auf das Bier
 Das Bier
 Das Bier
 Das Bier

Hardrockteil
============
 So du denkst du lässt mich trocken sitzen und gehst
 So du denkst dass ich dass schon irgendwie versteh'
 Oh Baby - tu mir das nicht an baby -
 Geh einfach raus - geh einfach raus du sollst gehn

Outro
=====
 Ich trink auch mal Schnäppes - ich trink auch mal SChnäppes - ich trink auch mal Schnappes - und Bier
Veröffentlicht unter Aufnahmetechnik, Gitarre, Musik, Musikproduktion, Song Ideen, Unsinn, VST-Instrumente | Schreib einen Kommentar

QWare Risk Manager SQL Statements / Query

The following statements can be used to get the Risk Measure Tree from the Bayoonet QWare Risk Manager

First you should create the view QWareSegment:

SELECT        QwareRiskmanager.dbo.Project.ProjectNo, QwareRiskmanager.dbo.Project.ProjectTitle, QwareRiskmanager.dbo.Version.VersionId AS ProjectVersion, 
                         QwareRiskmanager.dbo.Version.ProductVersion, QwareRiskmanager.dbo.FunctionSet.Type, QwareRiskmanager.dbo.FunctionSetFunction.FunctionNo, 
                         QwareRiskmanager.dbo.[Function].Description AS FunctionDescription, QwareRiskmanager.dbo.FunctionHazard.HazardNo, 
                         QwareRiskmanager.dbo.Hazard.Description AS HazardDescription, QwareRiskmanager.dbo.FunctionHazardCause.CauseNo, 
                         QwareRiskmanager.dbo.Cause.Description AS CauseDescription, QwareRiskmanager.dbo.Measure.Description AS MeasureDescription, 
                         QwareRiskmanager.dbo.FunctionHazardCauseMeasure.MeasureNo, QwareRiskmanager.dbo.Measure.NewMeasureNo, 
                         QwareRiskmanager.dbo.FunctionSetFunction.FunctionId, QwareRiskmanager.dbo.FunctionHazard.HazardId, QwareRiskmanager.dbo.FunctionHazardCause.CauseId, 
                         QwareRiskmanager.dbo.FunctionHazardCauseMeasure.MeasureId, seva.Abbreviation AS AfterSeverityAbbreviation, 
                         sevb.Abbreviation AS BeforeSeverityAbbreviation, propa.Abbreviation AS AfterProbabilityAbbreviation, propb.Abbreviation AS BeforeProbabilityAbbreviation, 
                         QwareRiskmanager.dbo.FunctionHazardCause.CommentAfter, QwareRiskmanager.dbo.FunctionHazardCause.CommentBefore
FROM            QwareRiskmanager.dbo.Project LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Version ON QwareRiskmanager.dbo.Project.ProjectId = QwareRiskmanager.dbo.Version.ProjectId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.FunctionSet ON QwareRiskmanager.dbo.Version.VersionId = QwareRiskmanager.dbo.FunctionSet.VersionId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.FunctionSetFunction ON 
                         QwareRiskmanager.dbo.FunctionSet.FunctionSetId = QwareRiskmanager.dbo.FunctionSetFunction.FunctionSetId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.[Function] ON QwareRiskmanager.dbo.FunctionSetFunction.FunctionId = QwareRiskmanager.dbo.[Function].FunctionId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.FunctionHazard ON 
                         QwareRiskmanager.dbo.FunctionSetFunction.FunctionSetFunctionId = QwareRiskmanager.dbo.FunctionHazard.FunctionSetFunctionId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.FunctionHazardCause ON 
                         QwareRiskmanager.dbo.FunctionHazard.FunctionHazardId = QwareRiskmanager.dbo.FunctionHazardCause.FunctionHazardId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.FunctionHazardCauseMeasure ON 
                         QwareRiskmanager.dbo.FunctionHazardCause.FunctionHazardCauseId = QwareRiskmanager.dbo.FunctionHazardCauseMeasure.FunctionHazardCauseId LEFT OUTER
                          JOIN
                         QwareRiskmanager.dbo.Measure ON 
                         QwareRiskmanager.dbo.FunctionHazardCauseMeasure.MeasureId = QwareRiskmanager.dbo.Measure.MeasureId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Hazard ON QwareRiskmanager.dbo.FunctionHazard.HazardId = QwareRiskmanager.dbo.Hazard.HazardId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Cause ON QwareRiskmanager.dbo.FunctionHazardCause.CauseId = QwareRiskmanager.dbo.Cause.CauseId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Severity AS seva ON QwareRiskmanager.dbo.FunctionHazardCause.SeverityAfterId = seva.SeverityId AND 
                         QwareRiskmanager.dbo.Version.VersionId = seva.VersionId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Severity AS sevb ON QwareRiskmanager.dbo.FunctionHazardCause.SeverityBeforeId = sevb.SeverityId AND 
                         QwareRiskmanager.dbo.Version.VersionId = sevb.VersionId LEFT OUTER JOIN
                         QwareRiskmanager.dbo.Probability AS propa ON QwareRiskmanager.dbo.FunctionHazardCause.ProbabilityAfterId = propa.ProbabilityId AND 
                         QwareRiskmanager.dbo.Version.VersionId = propa.VersionId LEFT OUTER JOIN
                        QwareRiskmanager.dbo.Probability AS propb ON QwareRiskmanager.dbo.FunctionHazardCause.ProbabilityBeforeId = propb.ProbabilityId AND 
                         QwareRiskmanager.dbo.Version.VersionId = propb.VersionId

After that you should create the view QWareImport that gives us the Risk Measure Tree:

CREATE VIEW [dbo].[QWareImport]
AS
SELECT     CAST(REPLACE(RTRIM(REPLACE((ISNULL(FunctionNo, '') + '+' + ISNULL(HazardNo, '') + '+' + ISNULL(CauseNo, '') + '+' + ISNULL(MeasureNo, '')), '+', ' ')), ' ', '+') 
                      AS varchar(255)) AS BB_ItemID, CAST(ProjectNo AS varchar(255)) AS ProjectNo, CAST(ProjectVersion AS varchar(255)) AS ProjectVersion, 
                      CAST(ProductVersion AS varchar(255)) AS ProductVersion, ISNULL(CAST(FunctionId AS varchar(255)), '') AS FunctionId, ISNULL(CAST(FunctionNo AS varchar(255)), '') 
                      AS BB_FID, ISNULL(CAST(FunctionDescription AS varchar(2048)), '') AS BB_FText, ISNULL(CAST(HazardId AS varchar(255)), '') AS HazardId, 
                      ISNULL(CAST(HazardNo AS varchar(255)), '') AS BB_HID, ISNULL(CAST(HazardDescription AS varchar(2048)), '') AS BB_HText, ISNULL(CAST(CauseId AS varchar(255)), 
                      '') AS CauseId, ISNULL(CAST(CauseNo AS varchar(255)), '') AS BB_CID, ISNULL(CAST(CauseDescription AS varchar(2048)), '') AS BB_CText, 
                      ISNULL(CAST(MeasureId AS varchar(255)), '') AS MeasureId, ISNULL(CAST(MeasureNo AS varchar(255)), '') AS BB_MID, 
                      ISNULL(CAST(MeasureDescription AS varchar(2048)), '') AS BB_MText, ISNULL(CAST(AfterSeverityAbbreviation AS varchar(255)), '') AS BB_EAM_Severity, 
                      ISNULL(CAST(BeforeSeverityAbbreviation AS varchar(255)), '') AS BB_EBM_Severity, ISNULL(CAST(AfterProbabilityAbbreviation AS varchar(255)), '') 
                      AS BB_EAM_Probability, ISNULL(CAST(BeforeProbabilityAbbreviation AS varchar(255)), '') AS BB_EBM_Probability, ISNULL(CAST(CommentAfter AS varchar(2048)), '') 
                      AS BB_CCommentAM, ISNULL(CAST(CommentBefore AS varchar(2048)), '') AS BB_CCommentBM, ISNULL(CAST(NewMeasureNo AS varchar(2048)), '') 
                      AS BB_MNr
FROM         DT_Qware.dbo.QWareSegment
UNION
SELECT     CAST(REPLACE(RTRIM(REPLACE((ISNULL(FunctionNo, '') + '+' + ISNULL(HazardNo, '') + '+' + ISNULL(CauseNo, '')), '+', ' ')), ' ', '+') AS varchar(255)) AS BB_ItemID, 
                      CAST(ProjectNo AS varchar(255)) AS ProjectNo, CAST(ProjectVersion AS varchar(255)) AS ProjectVersion, CAST(ProductVersion AS varchar(255)) AS ProductVersion, 
                      ISNULL(CAST(FunctionId AS varchar(255)), '') AS FunctionId, ISNULL(CAST(FunctionNo AS varchar(255)), '') AS BB_FID, 
                      ISNULL(CAST(FunctionDescription AS varchar(2048)), '') AS BB_FText, ISNULL(CAST(HazardId AS varchar(255)), '') AS HazardId, 
                      ISNULL(CAST(HazardNo AS varchar(255)), '') AS BB_HID, ISNULL(CAST(HazardDescription AS varchar(2048)), '') AS BB_HText, ISNULL(CAST(CauseId AS varchar(255)), 
                      '') AS CauseId, ISNULL(CAST(CauseNo AS varchar(255)), '') AS BB_CID, ISNULL(CAST(CauseDescription AS varchar(2048)), '') AS BB_CText, '' AS MeasureId, 
                      '' AS BB_MID, '' AS BB_MText, '' AS BB_EAM_Severity, '' AS BB_EBM_Severity, '' AS BB_EAM_Probability, '' AS BB_EBM_Probability, '' AS BB_CCommentAM, 
                      '' AS BB_CCommentBM, '' AS BB_MNr
FROM         DT_Qware.dbo.QWareSegment
UNION
SELECT     CAST(REPLACE(RTRIM(REPLACE((ISNULL(FunctionNo, '') + '+' + ISNULL(HazardNo, '')), '+', ' ')), ' ', '+') AS varchar(255)) AS BB_ItemID, CAST(ProjectNo AS varchar(255))
                       AS ProjectNo, CAST(ProjectVersion AS varchar(255)) AS ProjectVersion, CAST(ProductVersion AS varchar(255)) AS ProductVersion, 
                      ISNULL(CAST(FunctionId AS varchar(255)), '') AS FunctionId, ISNULL(CAST(FunctionNo AS varchar(255)), '') AS BB_FID, 
                      ISNULL(CAST(FunctionDescription AS varchar(2048)), '') AS BB_FText, ISNULL(CAST(HazardId AS varchar(255)), '') AS HazardId, 
                      ISNULL(CAST(HazardNo AS varchar(255)), '') AS BB_HID, ISNULL(CAST(HazardDescription AS varchar(2048)), '') AS BB_HText, '' AS CauseId, '' AS BB_CID, 
                      '' AS BB_CText, '' AS MeasureId, '' AS BB_MID, '' AS BB_MText, '' AS BB_EAM_Severity, '' AS BB_EBM_Severity, '' AS BB_EAM_Probability, 
                      '' AS BB_EBM_Probability, '' AS BB_CCommentAM, '' AS BB_CCommentBM, '' AS BB_MNr
FROM         DT_Qware.dbo.QWareSegment
UNION
SELECT     CAST(REPLACE(RTRIM(REPLACE((ISNULL(FunctionNo, '')), '+', ' ')), ' ', '+') AS varchar(255)) AS BB_ItemID, CAST(ProjectNo AS varchar(255)) AS ProjectNo, 
                      CAST(ProjectVersion AS varchar(255)) AS ProjectVersion, CAST(ProductVersion AS varchar(255)) AS ProductVersion, ISNULL(CAST(FunctionId AS varchar(255)), '') 
                      AS FunctionId, ISNULL(CAST(FunctionNo AS varchar(255)), '') AS BB_FID, ISNULL(CAST(FunctionDescription AS varchar(2048)), '') AS BB_FText, '' AS HazardId, 
                      '' AS BB_HID, '' AS BB_HText, '' AS CauseId, '' AS BB_CID, '' AS BB_CText, '' AS MeasureId, '' AS BB_MID, '' AS BB_MText, '' AS BB_EAM_Severity, 
                      '' AS BB_EBM_Severity, '' AS BB_EAM_Probability, '' AS BB_EBM_Probability, '' AS BB_CCommentAM, '' AS BB_CCommentBM, '' AS BB_MNr
FROM         DT_Qware.dbo.QWareSegment

To query a unique Risk Project in the appropriate version you have to perform the following selection

SELECT BB_ItemID, 
		ProjectVersion, 
		ProductVersion, 
		FunctionId, 
		BB_FID, 
		BB_FText, 
		HazardId, 
		BB_HID, 
		BB_HText, 
		CauseId, 
		BB_CID, 
		BB_CText, 
		MeasureId, 
		BB_MID, 
		BB_MText, 
		BB_EAM_Severity, 
		BB_EBM_Severity, 
		BB_EAM_Probability, 
		BB_EBM_Probability, 
		BB_CCommentAM, 
		BB_CCommentBM,
		BB_MNr
FROM DP_Qware.dbo.QWareImport
WHERE ProjectNo='**ProjectNo**' AND ProductVersion='**ProductVersion**' 
ORDER BY 1
Veröffentlicht unter Allgemein | Schreib einen Kommentar

Atlassian JIRA mit MS SQL : Select the text, date or string value from a custom field of an issue

Problem

A string, date or a text-value of an custom field shall be retrieved from an issue

Solution

SELECT	pk.PROJECT_KEY+'-'+CAST(ji.issuenum AS varchar(max)) as issue, 
		cfv.STRINGVALUE, 
		cfv.TEXTVALUE,
		cfv.DATEVALUE
FROM jiraissue ji 
INNER JOIN customfieldvalue cfv ON ji.id=cfv.issue 
INNER JOIN project_key pk ON ji.PROJECT=pk.PROJECT_ID 
WHERE pk.PROJECT_KEY+'-'+CAST(ji.issuenum AS varchar(max))='AT-15' 
AND cfv.CUSTOMFIELD=(SELECT TOP 1 id FROM customfield WHERE cfname='Requested document')

Veröffentlicht unter Atlassian JIRA, MS SQL Server | Schreib einen Kommentar

Atlassian JIRA MS SQL Server: Get Affects version or fixed version from the Database by query

Problem

To fetch the values „Affects version“ or „Fixed Version“ from the JIRA Database via SQL, the use of different relations/tables is necessary

Solution – Lösung

You can use the ASSOCIATION_TYPE=’IssueVersion‘ for Affects version and ASSOCIATION_TYPE=’IssueFixVersion‘ to get the Fixed version

The next example shows how to retrieve Affects Version for Issue-ID AT-15:

SELECT projectversion.id, vname, project_key.PROJECT_KEY+'-'+CAST(jiraissue.issuenum AS varchar(max)) as pkey, ASSOCIATION_TYPE
FROM   projectversion, nodeassociation, jiraissue, project_key
WHERE  SINK_NODE_ID = projectversion.id
AND    SOURCE_NODE_ID = jiraissue.id
AND    project_key.PROJECT_ID=jiraissue.PROJECT
AND    ASSOCIATION_TYPE='IssueVersion' 
AND    project_key.PROJECT_KEY+'-'+CAST(jiraissue.issuenum AS varchar(max))='AT-15'

Veröffentlicht unter Atlassian JIRA, MS SQL Server | Schreib einen Kommentar

My Halloween-Musikvideo: Let’s break the law tonight (The Purge)

Oh nein – ich hab schon wieder ein Heim-Musikvideo verbrochen, dass die Welt nicht braucht 😀 … Aber wie soll man sonst auch die Social Funktionen von YouTube testen können? Die scheinen sich ja darauf zu beschränken, das man nur über Videos interagieren und Likes/Dislikes/Kommentare dort hinterlassen kann.

Da es ja scheinbar für YouTube-Neueinsteiger schwierig ist mit dem Suchalgorithmus ein entsprechendes Ranking zu erhalten, habe ich mal die Tipps befolgt und ein auffälliges Thumbnail, in dem ich eine Pseudo-Bierwerbung für ein Fuldaer Lokalbier mache (Frauenberger Frohnatur), erstellt . Ob sich die Leute / der Algorithmus davon überzeugen lässt ist allerdings noch fragwürdig ;-).

Wie gut dass das Internet voll von Verrückten ist, da fällt man doch selber gar nicht mehr auf:

Gitarre: Ich
Bass: Ich
Schlagzeug: Ich
Gesang: Ich

Veröffentlicht unter Gitarre, Musik, Musikproduktion, Song Ideen | Schreib einen Kommentar