Programmierung – VBA in Excel mit ein wenig WTF

Pivot Tabellen, VBA Scripte und Programmierung in Excel. Das macht alles so unbeschreiblich viel spaß. Das man meinen könnte man sollte Spaß neu definieren so das man unter Spaß ab sofort folgendes versteht.

Spaß ist,

  • unlogische Abläufe in einer ständig meckernden Umgebung abzubilden.
  • als Antwort nur unverständliches kryptisches Gebrabbel zu bekommen.
  • Masochistisch veranlagt sein.
  • man nach 2 Tagen festzustellen das es da irgendwo doch einen einfacheren Weg gibt. (Zettel/Stift)

Spaß ist was anderes!

Fertig erstellte Berichte in Excel zu übernehmen nur weil man nochmal an den Zahlen drehen möchte ohne die eigentlichen Zahlen zu verändern. Das hat für mich so den Eindruck als wolle man nochmal an der Statistik drehen und sich das ganze schön rechnen aber Auftrag ist nun mal Auftrag.

Pivot Tabellen. Pivot Tabellen, so etwas abartiges. Aber im Allgemeinen ist Excel an sich ja schon Grausam genug. Wenn da nicht auch diese komische VBA währe, es Hinterlässt bei mir den Eindruck als müsste ich mich gründlich Waschen, sehr sehr gründlich. Da bekomme ich glatt Waschzwang.

Dieses ganze Zeug ist einfach nur grausam. Grausam ohne Ende.

Programmierung – Sharepoint aus der Hölle

Eigentlich wollte ich einige Hass Tiraden, auf die Art und Weise wie Microsoft denkt, dass das Web arbeitet, los lassen. Aber ums ehrlich zu sagen eher sollte man mit diesen Leuten Mitleid haben. Nicht das C# vom Codestyle her echt schön ist (hab schon grausamere Sprachen gesehen). Aber was die Leute von Microsoft geritten haben muss, um Sharepoint so Unfreundlich zu gestalten, und Vor allem so Unanpassbar so schecklich.

Nicht das ich mich auch im entferntesten mit Sharepoint wirklich auskenne, aber das was ich gesehen habe reicht mir um so etwas wie Pure Abneigung zu empfinden. Und an dieser Stelle werde ich immer all Diejenigen auslachen die da behaupten das man mit Sharepoint Easy und ohne aufwand das erreichen kann was man will und auch braucht. Nein ganz und gar nicht. Ich bin ungefähr 10 mal schnell mit PHP/HTML5/JQuery als mit Sharepoint/C# Wenn es darum geht effektiv Daten zu manipulieren. Wenn es darum geht nur irgendwelchen Müll zusammen zu klicken dann bitte nehmt Sharepoint für her.

Aber das mir Sharepoint Berater nicht mal erklären können warum man in eine im Browser laufenden Anwendung kein Jquery UI einbinden, und die Styling Eigenschaften sowie Callings von Jquery nicht global machen kann. (Jedenfalls hab ich dazu bisher nix gefunden, geht wahrscheinlich irgendwo, Fehlt dem Sharepoint wahrscheinlich nur an irgendeine verfickten stelle irgendeine verwixxte Berechtigung). Warum man kryptische Eigenschaften über Zich elemente Schleifen muss anstelle einer Zentralen Datenstelle bleibt mir schleierhaft.

Warum man die alten onClick Eigenschaften auf die Elemente direkt schreibt anstelle diese in Extra JS code auszulagern ist mir schleierhaft. Aber hej, immerhin beherscht Sharepoint hervorragende Divsuppe, garniert mit ich packe alles in Tabellen! Jey ob das Sinn ergibt oder nicht ist doch ej Wurst. Packen wir noch ein paar eigens generierte ID und andere Attribute dazu. Das ganze gepaart mit ihrer hauseigenen ASPX Soße und fertig ist etwas das wie HTML aussieht aber kein HTML ist. Etwas das wie XML mit einer XLST aussieht aber kein echtes XML ist (Es sei denn man bemüht sich selbst um die XML/XLST).

Mal von dem beschissenen Overhead abgesehen. Wir bei uns setzten Sharepoint zur Zeiterfassung ein. Es verlangt an der stelle eine Rechenerkennungsanmeldung über das Microsoft Netzwerk als Webseite.

Aber das ist noch nicht mal das schlimmste. Das schlimmste für mich ist ich bin PHP5/HTML5/MYSQL CSS/JQUERY Entwickler. Ich kann hervorragend Schlanken HTML5 schreiben. Dazu CSS von mir aus in LESS oder SASS gepaart mit Steuerungslogik in Jquery. Mit dem Richtigen Konzept geht das in Stunden wenn ich richtig Motiviert bin.

Ich hab letzte Woche, Weil es ja die Zukunft ist (Persönlich halte ich Sharepoint für eine noch schlimmere Totgeburt als Vista und Windows 8) jedes mal wenn ich diesen Satz höre möchte ich weinen. Wie kann eine Software die Ein so inkonsequentes Rechtemanagement hat die Zukunft sein. Wie kann eine Software die HTML-quellcode vergewaltigt und misshandelt. Überhaupt von den Gängigen Browsern Unterstützung finden. Ein 30 Fach verschachteltes DIV war schon vor Sharepoint Schlechter Style und wird es auch bleiben. 7 fach verschachtelte Tabellen sind Böse und werden das auch immer bleiben. Egal wie sehr man das gesamte CSS in Weiß und ja nix mit verlauf verfrachtet. Schlechtes HTML bleibt schlechtes HTML und wenn die Renderer der Browser sich teilweise selbst zusammenreimen müssen was das ganze Soll macht es da auch nicht besser. 🙂 Aber HTML in schlecht konnte MS schon seit Frontpage ja schon sehr gut 🙂

Nein viel schlimmer ist da eigentlich das Microsoft mit Sharepoint eine Speicherlogik fährt die für jeden echten Tabellen Designer (SQL Versteher) im Quadrat kotzen lässt, und zwar Einhörner gepaart mit Nudel Suppe. Egal was es ist und wie es aufgebaut wird es landet alles in irgendeiner Hashwert gefickten Tabelle mit Blobfeld wo Daten anhand des Hashes verschlüsselt vorliegen. O_o? Ja My direkte Manipulation der Daten wäre auch nicht wünschenswert nich mal über MSSQL. Man kann die Daten nur über die Oberfläche bearbeiten in der sie Erstellt wurden. Ansonsten muss man irgendwelche Verrenkungen veranstalten über irgendwelche gekapselten Klassen die von irgendwo ableiten ohne so recht zu wissen wo nun die Daten genau stecken.

Und für jeden der sich jetzt Fragt warum Heult der hier jetzt so rum.

irgendein Hello World für Sharepoint 2009
MSDN Tutorials für Hello World

PS: hier mal ein Vergleich 🙂

<?php echo 'hello world!'; ?>
<html><body>hello world</body></html>
<script type="text/javascript">
document.write('hello world');
</script>

Diese drei Dinge tun im Grunde das selbe wie die beiden Sharepoint tuts da … Hello World ausgeben 😉 Gut man muss immerhin bei PHP noch wissen wie man einen Apache mit php Installiert. aber ehrlich -> Wamp bei einfachem HTML brauch man nichmal das die gehen so im browser auf. Und javascript muss nur in eine HTML Seite eingebettet werden. Alles keine Hexerei. 😉 Aber M$ konnte ja noch nie in leicht. Weder leicht für Anwender noch leicht für Entwickler. Und kommt mir ja nicht mit .net, ich Arbeite jetzt seit 2005 als Programmierer. 🙂 die 5 Jahre davor zählen nich weil Ausbildung und so.

Aber naja falls wer irgendwo eine halbwegs gute befehlreferenz für c# für Sharepoint 2013 kennt 😉 wäre ich sehr dankbar. So etwas ähnliches wie php.net und kommt mir hier jetzt nicht msdn. MSDN is scheisse hoch drei. Denn was php.net ausmacht sind die Kommentare und die lebendigen Beispiele. Von der Vielfalt bei Jquery/Css und Html5 brauch ich da gar nicht erst anfangen.

Eine Schande Namens Datenbank Design

Ursprünglich wollt ich nur was zu MSSQL sagen aber das währe zu kurz gegriffen, denn auch MSSQL bietet irgendwo seine Vorteile und hat wahrscheinlich in den Augen seiner Schöpfer seine Daseinsberechtigung. Es ist eher der Designer also das Management Studio was mich anwürgt.

Wer schon einmal versucht hat aus diesem Studio heraus ein DB Dump zu machen um eventuell die gesamte Datenbank in ein anderes Format zu schaufeln der weiß wie leidensfähig man sein muss wenn es um MSSQL geht.

Ich hab irgendwann aufgegeben nenn Converter zu suchen und hab mir die Skripte alle selbst geschrieben samt DB Connector. Was mich im Endeffekt nur Minuten gekostet hat.

Will man hingegen nurn Backup machen, läuft die ganze Sache Rechtsklick Sichern … fertig, wieder in MSSQL einspielen sollte da weniger das Problem sein. Wenn der Designer nicht für Masochisten währe ja.

Ein Beispiel gefällig?

mysqldump -u **** -p --no-create-info {databasename} > {path}/{filename}.sql

Man gibt noch eventuell einen Pfad an, oder nicht je nach dem ob man sich schon im Verzeichnis befindet wo man die Datei haben will und man ist schon fast fertig, ein Enter und noch die Eingabe von MySql Password und die gewählte Datenbank ist gedumpt. Simple, Stupide, Einfach. Klar man kann da noch Ewig parameter dran klatschen. Aber fürn einfach Dump reicht das da vollkommen aus.
Und PS. Soll ich euch mal was stecken das würde so sogar unter CMD laufen 😉 man müsste dort nur ins Verzeichnis von MySql Wechseln. Weil er unter windows den dienst so nicht findet ^^ außer man schreibt halt.

C:\>wamp\bin\mysql\mysql5.5.8\bin\mysqldump -u *** -p test > d:\stuff\test.sql

Wer mir nicht glaubt hier ein Auszug des Resultates.

--
-- Table structure for table `test`
--

DROP TABLE IF EXISTS `test`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `test` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `test`
--

Schade das M$Sql sowas nicht kann, jedenfalls ist mir bis Heute nichts dergleichen begegnet. Mal von der Abartigkeit abgesehen sich Wahllos Speicher zu reservieren und ihn einfach nicht wieder frei zu geben. Frei nach dem Motto könnte ja in x Sekunden nochmal das selbe gefragt werden.

Wer beim Schreiben seiner Datenbank Klassen und Der SQL Statements so etwas nicht berücksichtigt, dass häufig die selben Daten angefragt werden und diese nach x Fragen in Zeitraum y nicht von selbst einfach in Speicher läd. Und dann die Daten nicht einfach wieder ausm Arbeitsspeicher holt.
Sondern ständig die Datenbank beackert, gehört sowie so geschlagen und so.

Noch besser sind natürlich, UNION SELECTS über 17 Tabellen! Und ich scherze hier nicht. Genau das hab ich hier nämlich gehabt. ein UNION SELECT über 17 Tabellen. Diese Abfrage war und ist faktisch Defekt by Design!

Und glaubt nicht das die 17 Tabellen alle was mit einander zu tun hatten. NEIN … der Author wollte sich nur die Abfragen sparren und Alles was man zu einem User hohlen kann in eine Abfrage verfrachten, Um so Zeit zu sparren. Also anstelle die Daten dann zu Laden wenn sie WIRKLICH gebraucht werden, wurde einfach alles bei jedem Seiten Load geladen! Ob es gebraucht wird oder nicht.

Yey und irgendwann haben sie sich dann gewundert warum die Seite zum Laden plötzlich Minuten statt Sekunden braucht.

Kleines Beispiel? Das hier ist natürlich verschleiert 😉 Weil wird derzeit noch so eingesetzt. Aber das tut im Grunde nichts anderes, als festzustellen welche Rolle ein User hat. Herrlich oder?

SELECT
	c.idc, 
	c.co, 
	c.theme,
	p.idp, 
	uRoleM.rn, 
	NULL, 
	NULL,
	ul.urm_id, 
	m2.name, 
	c.KD, 
	c.mV, 
	c.mDD, 
	ISNULL(c.scRscR,1), 
	ISNULL(ul.language,ISNULL(c.defaultLanguage,'de_DE'))
FROM 
	co c, 
	Pr p, 
	UL ul, 
	URM uRoleM, 
	Module m2
WHERE 
		c.idc=p.co_id
	AND p.idp=ul.Pr_id
	AND ul.un=''
	AND m2.id=uRoleM.module_id
	AND ul.urm_id=uRoleM.id_role
UNION
SELECT 
	c.idc, 
	c.co, 
	c.theme, 
	p.idp, 
	uRoleM.rn, 
	ummr.rights,
	m.name,
	ul.urm_id, 
	m2.name,
	c.KD,
	c.mV, 
	c.mDD, 
	ISNULL(c.scR,1),
	ISNULL(ul.language,
	ISNULL(c.defaultLanguage,'de_DE'))
FROM 
	co c, 
	Pr p, 
	UL ul,
	URM uRoleM,
	UserManagementModuleRights ummr, 
	Module m, 
	coModuleRights cmr, 
	Module m2
WHERE 
		c.idc=p.co_id
	AND p.idp=ul.Pr_id
	AND ul.un=''
	AND ul.urm_id=uRoleM.id_role
	AND ummr.role_id=uRoleM.id_role
	AND m.id=ummr.module_id
	AND cmr.module_id=ummr.module_id
	AND c.idc=cmr.co_id
	AND m2.id=uRoleM.module_id
GROUP BY 
	c.idc, 
	c.co, 
	c.theme, 
	p.idp, 
	uRoleM.rn, 
	ummr.rights,
	ul.urm_id, 
	m.name, 
	m2.name,
	c.KD,
	c.mV, 
	c.mDD, 
	c.scR, 
	ul.language, 
	c.defaultLanguage
UNION
SELECT 
	c.idc, 
	c.co, 
	c.theme, 
	p.idp, 
	uRoleM.rn, 
	ummr.rights,
	me.extraName,
	ul.urm_id, 
	m2.name,
	c.KD,
	c.mV, 
	c.mDD, 
	ISNULL(c.scR,1), 
	ISNULL(ul.language,
	ISNULL(c.defaultLanguage,'de_DE'))
FROM 
	co c, 
	Pr p, 
	UL ul,
	URM uRoleM,
	UserManagementModuleRights ummr, 
	ModuleExtra me, 
	coModuleRights cmr, 
	Module m2
WHERE 
		c.idc=p.co_id
	AND p.idp=ul.Pr_id
	AND ul.un=''
	AND ul.urm_id=uRoleM.id_role
	AND ummr.role_id=uRoleM.id_role
	AND ummr.extra_id=me.id
	AND cmr.extra_id=ummr.extra_id
	AND c.idc=cmr.co_id
	AND m2.id=uRoleM.module_id
GROUP BY 
	c.idc, 
	c.co, 
	c.theme,
	p.idp, 
	uRoleM.rn, 
	ummr.rights,
	ul.urm_id, 
	me.extraName, 
	m2.name,
	c.KD,
	c.mV,
	c.mDD, 
	c.scR, 
	ul.language, 
	c.defaultLanguage

BTW. als ich diese Abfrage das erste mal sah, war meine Reaktion. Schmeiß weg die Datenbank und mach neu. Das da ist faktisch Kaputt. Also halten wir fest. Wenn ihr sowas zusammenschreibt, Überdenkt euer Datenbank Design nochmal dringendst! Weil dann ist das nämlich Defekt, vollkommen Defekt!

Neue Tapete

Wie das so ist mit dem Web, und vor allem mit der eigenen Webseite. Man findet ein Theme, dieses gefällt einem im Grunde. Aber es gibt immer so ein paar Sachen die einem nicht ganz so zusagen. Also fängt man an erst so Kleinigkeiten zu ändern, hier ne Link Farbe, dort der Rand eines Bildes. Und ehe man sich versieht, hat man eben mal das halbe Theme geändert. Mal davon abgesehen das ich mit das Theme auch noch mit dem WordPress Plugin Codestyling Localization vollständig ins deutsche übersetzt habe.

Steht nun erst einmal Folgendes im Vordergrund, wie mach ich aus 3 bis 10 Besuchern die Woche 😉 100 und mehr am Tag. Ich könnte den DDC Abschalten und nach hier verlinken. Aber dann würde ich 3 Jahre Content in die Tonne treten. Und das will ich nun auch nicht. Wer gibt schon gerne ein Haufen gesammelten Quasi Porno auf. Also ich nicht. Und in den Nachweisbaren 🙂 ca. 10 Jahren in denn ich nun Betreiber der Domain DDC-Forever.de bin, hab ich dort so einiges Verbrochen ^^ die Frage ist hat die NSA das eigentlich alles? Also Way Back nicht. 🙂

Aber wer das hier liest und mich kennt der weiß das die Webseite sich weiterhin verändern wird. Ein Webseite oder auch ein Digitales Produkt egal welches, welches sich nicht weiterentwickelt ist als tot oder gestorben zu betrachten. Dinge die nur bis zu einem Punkt X entwickelt werden sind reine Totgeburten.

Deswegen, entweder Pinselt man alle paar Monate irgendwas um oder Sorgt ständig für frischen Nachschub an zu konsumierenden Inhalt. Beides Erfordert Ausdauer und den Willen sich auch mal die halbe Nacht um die Ohren zu schlagen. Und wie haben schon viel andere vor mir gesagt Es kommt auf die Art an wie man bloggt nicht was! Ich ergänze das eben noch. Jeder Depp kann ein tumblr machen und dort Bilder rein klatschen. Das macht ihn oder sie aber noch lange nicht zum Blogger. Genau so kann auch jeder Hans etwas im Internet schreiben, das macht ihn/sie aber trotzdem noch lange nicht zu einem gebildeten Menschen. Erst die Art der Präsentation und die weise der Kommunikation entscheiden über Erfolg oder Misserfolg.

So schließe ich diesen Beitrag mit ein paar Wohnungsweisheiten.
Nur weil ich weiß wie man einen Stuhl baut, heißt das noch lange nicht das ich auch gute Stühle bauen könnte.
Nur weil ich gut im Abpausen bin, macht mich das noch lange nicht zum Künstler.
Die Zeit verwandelt irgendwann alles in Staub, also warum sollte man da gegen die Zeit sein und Staub wischen!

Du bist doch Programmierer?

EDV-Systeme verarbeiten, womit sie gefüttert werden.
Kommt Mist rein, kommt Mist raus.
André Kostolany

Hat er gar nicht mal so unrecht der tote Mann.

Aber die Überschrift dürfte jeder kennen. Ihr wurdet doch bestimmt auch schon mindestens einmal sowas gefragt, wenn ihr denn beiläufig mal erwähnt habt das ihr programmieren könnt oder Programmierer seid.

Ist mir erst am Wochenende wieder entgegen gekommen. Du Wyveres du bist doch Programmierer? Antwort ein leises gewimmertes Ja.

Ich sollte Lernen zu verschweigen was ich tue. Denn es kam was ich befürchtete. Das berühmte du könntest mir da mal bei was Helfen :).

Nicht das ich nicht gerne Helfe, siehe Kraftfuttermischwerk.de, Ronny besorgt sich da derzeit neuen Webspace für die Haupt-Domain weil wegen geht so gar nicht mehr. Da helf ich gerne, weil das ich gelernt habe 🙂 WordPress und so. Damit arbeite ich Täglich. nicht nur hier in meinem Blog, auch auf Arbeit.

Aber wenn ich dann von völlig Wildfremden gefragt werde ob ich ihnen helfen könnte bei, Shop Systemen, riesigen Portalen oder die ganz krasse Sorte von, Ich hab die Idee des Jahrhunderts ach was sag ich des Jahrtausends Fratzengrätsche hoch 2, Soziales Höckeln oder so. Da rollen sich mir die Zehn Nägel auf, was da so alles an Ideen an mich heran getragen wird. Einiges klingt auch wirklich spannenden und würde sich auch wirklich lohnen. Aber wenn es dann darum geht das ich solche Projekte nie und nimmer nach Feierabend umsetzen werde weil wegen is Freizeit ej, da mach isch höhstens aus Fun ej! weeste!. Und ich die Leute dann darauf Hinweise das ich damit mein Geld verdiene und für eine Firma arbeite die da bei helfen könnte. Werden Sie Teilweise schon abgeschreckt.

Aber nur Teilweise, einige Fragen dann noch nach den Preisen, 80 Euro Brutto die Mannstunde ist echt nicht viel 🙂 aber da fällt der Rest dann schon aus dem Raster oder vom Stuhl.

Was so teuer. Mein Kollega macht mir das für 500 Euro ej! Joar für 500 Euro mach ich auch … Designstudie von 4 Stunden simples HTML Design für ne WordPress Seite. Für 1000 Euro kann man da drin dann auch was klicken!

Aber der Hammer kommt dann, wenn Sie hören, bei welchem Betrag ich Überhaupt erst anfange zu arbeiten. 😉 15k Euro darunter denk ich nicht mal darüber nach ernsthaft in Erwägung zu ziehen, mir auch nur den Vorschlag zu Ende anzuhören.

Hier steht ein Unangemessener Porno vergleich der Gedanke ist widerlich oder so aber passt eigentlich.
Ne gute Nutte verkauft sich doch auch nicht an jeden unter wert oder? Für ein 10 Minuten Blow Job bezahlen aber 2 Stunden volles Programm erwarten.

Wie wird man Programmierer?

if($information == $Information) then
println('Gehe nicht über los');
else
println('hier deine 400 euro');

So oder so ähnlich kann man sich das Vorstellen, Programmieren zu können heißt nicht das man auch versteht worum es geht. Nur weil man ein Wenig HTML oder Javascript irgendwo hin schreiben kann, macht einen das noch lange nicht zum Programmierer.

Programmieren heißt reale Abläufe zu abstrahieren und auf die simpelste Art runter zu brechen, nur um das ganze dann wieder zu verkomplizieren. Ein Programm ist immer ein Ablauf, eine Folge von Befehlen. Wie simpel oder kompliziert hängt nur von der jeweiligen Aufgabe ab, die das Programm erfüllen muss.

Wenn ich über ein Programm nachdenke, dann Entwickel ich es schon im Kopf. Funktionen, Oberflächen und Abläufe, dass alles bildet sich innerhalb von Sekunden. Man analysiert ein Problem, entwickelt Aufgrund von Theorien, einige Lösungsansätze und Formuliert den plausibelsten Ansatz zu einer vollständigen Lösung aus. So oder so ähnlich sollte man vor gehen.

In 99% aller Fälle wird es wahrscheinlich bei der ersten Idee bleiben die man hat, diese entwickelt man solange bis man merkt das es doch nicht geht, wirft alles weg und fängt von vorne an. Fragt mal die Entwickler von Duke Nukem Forever. 😉 Die haben so einige male alles neu aufgerollt.

Besser ist es vorher einen Plan zu haben.

Und ja der sollte auch funktionieren. ;D

Wie man Oberflächen Designed

Ich steh ja Total auf schmutzig, rostig und grau.
Vor allem Grau in allen Abstufungen.

Mal als Beispiel
oberflaeche
An dieser Oberfläche arbeite ich derzeit.

Woran erkennt man nun gute Oberflächen? Daran das man alles was man Sucht auf einen blick sieht? An der Farbgebung?
Nein eigentlich erkennt man eine gute Oberfläche in einem Programm daran das sie sich selbst erklärt. Und man zur Bedienung des Programmes nur äußerst selten oder gar nicht in die Hilfe schauen muss.

Schönes Beispiel gefällig ;D
Extract!basic Programmoberfläche
Auch wenn das Programm da für sein Zweck aller Wahrscheinlichkeit nach echt super ist. Wenn ich sowas entwerfen würde, müsst ich mich wieder in die Berufsschule begeben und nochmal neu Lernen. Diese Oberflächen erinnern einfach zu stark an die Windows 95 Zeit.

😉 Ich behaupte nicht das ich ein Universal Rezept darauf besitze wie man Oberflächen und Steuerelemente nun zu Designen hat. Aber ich werde in den Nächsten Wochen meine Gedanken dazu in ein paar Beiträge pressen 😉 Vor allem was den Web bereich angeht.