Archiv der Kategorie: IT

Mal “wieder” was übers Programmieren

Wahrscheinich überrascht es keinen, wenn ich schreibe, damit verbringe ich einen Teill meines Lebens. Mich haben Programmiersprachen schon immer interessiert und ich habe wirklich einiges auf mich genommen um in bestimmten davon arbeiten zu können. Zu meiner Zeit an der Uni war es die Möglichkeit eiffel zu benutzen.
https://de.wikipedia.org/wiki/Eiffel_(Programmiersprache)

Die Idee dahinter scheint mir heute noch eine der wirkich besseren zu sein. Es gibt dort ein Prinzip, nennt sich CQS (command query separation) und es meint. Das nur Methoden den Zustand eines Objektes ändern sollte, es in Abfragen aber nicht vorkommt.

Beispiel set_x(some_Value)  enthält nur x := someValue
Aber get_x():someValue enthält nur result := x

Bei dem einen ändert man den Zustand einer  Variiablen bei der anderen darf/sollte man es nicht.

C Programmierer kennen das Problem mit Rückgabewerten. Wo packt man den/die hin? In C gibt es kein “Tupel” Konzept und man kann nur einen Wert zurückgeben, dieser eine Wert kann aber auch ein void* sein und das kann wirklich alles sein. Auf der anderen Seite, wie informiert man den Benutzer, daß etwas schief gegangen ist. Das wird in sehr vielen Bibliotheken eben über den Rückgabewert erledigt. Darum findet man in C so etwas

#define ERROR_SUCCESS 0
#define ERROR_WHATEVER 1
Vielleicht in angenehmeren  Code in einem enum. Der Rückgabewert gibt also an ob alles “glatt” ging oder nicht, damit ist dannn aber der Rückgabewert “weg” und man muß sich mit globalen Variablen oder veränderbaren Parmetern behelfen.

Hier zwei Lösungen aus anderen Programmiersprachen:
https://doc.rust-lang.org/book/ch09-00-error-handling.html
https://go.dev/doc/tutorial/handle-errors

In Smalltalks gibt es nur Messages die etwas zurückgeben…

Aber nun kommen wir zu Programmiersprachen, die Seiteneffekte gar nicht leiden können und nur auf “pure” Funktionen setzen. Das bedeutet, wenn man diese aufruft ergeben die mit denselben Eingabedaten immer, diegleichen Ergebnisse. Die “dreckige” Arbeit von Seiteneffekten muß speziell gekennzeichnet werden. Prominentestes Beispiel dürfte Haskell sein (dazu eines der besten Bücher, was man auch online finden kann  http://book.realworldhaskell.org/read/)

In jedem Buch wird die “Reinheit” der Sprache gelobt, handelt es sich um eine “unreine” Methode also mit Seiteneffekten wird es immer irgendei IO type werden, das nennen die Monad.

Nun, die Autoren behaupten es sei der größte Vorteil. Ich stimme soweit durchaus mit ihnen überein, aber ich behaupte auch es ist der größte Nachteil, damit stimme ich als nicht mit Ihnen überein.

Ich bin immer mehr zur Überzeugung gekommen, daß der ausbleibende Erfolg von funktionalen Sprachen damit zusammenghängt. Es sieht so aus als ob Zustand – Zustandsänderung -> neuer Zustand für wirklich die allermeisten Programmierer einfacher verständlich ist und dem normalen Denkmodell entspricht. Was man uns nicht verdenken kann. Sitzen Sie in einem Auto und wollen los fahren, müssen Sie etwas tun. Einen Gang einlegen, Kupplung kommen lassen und entsprechend Gas geben, dann fährt ein Auto eben los, der Zustand ändert sich von stehendem Auto -> fahrendem Auto.

Ich denke auch, daß eben Zustandveränderungen genau das sind was man in allen anderen Bereichen macht. Dieses hinter einem Monad zu verstecken, scheint für mich einer der Hauptgründe zu sein, warum  man Funktionale Programmiersprachen nicht in größeren Bereichen kennt. Betrachtet man unsere gesamte Infrastruktur, dann wird man eher früher als später auf C treffen. Trotz aller Probleme damit, trotz der problematischen nebenläufigen Programmierung. So gut wie alle Betriebsysteme benutzen C als Basis und es gilt selbstredend speziell auch für jedes Unix, heiße es LInux, BSD, Solaris, HP-UX, AIX. So gut wie jeder relationale Datenbank ist in C geschrieben und manche davon werden tatsächlich milliardenfach benutzt (z.B. sqlite)

Ich persönlich kenne wirklich kein Programm, welches ich täglich benutze, daß in einer funktionalen Sprachhe implementiert wurde. Man kann behaupten, das derzeitige vorherrschende Programmiermodel basiert auf Klassen, Objekten und Messages.

Ja, es ziehen funktionale Elemente in OO-Sprachen ein, aber Blöcke sind in Smalltalk ein uraltes Konzept! Kurz die neuen PS müssen sich an einer der ältesten noch benutzen PS anlehnen. Das finde ich höchst interessant und erklärt vielleicht zu einem Teil warum ich Smalltalk für eine der besten Programmiersprachen halte.

Nur was Programmierer oder Leute mit einem Hang zur Programmmierung

Mal ‘ne wie geht es Ihnen Frage. Nur was für Programmierer oder programmmieraffine.

Geht es Ihnen auch so, daß Sie bestimmte Programmiersprachen mögen und andere einfach nicht?

Ich merke es immer und immer wieder. Sprachen die ich mag:
Smalltalk, C, Ruby, Eiffel, Scheme, Common Lisp, IO, Self, D, Dylan, SQL (auch procedural SQL)

eher indifferent:
C#, Java, Python, Tcl/Tk

mal so / mal anders
Haskell, Ocaml, F#, WLanguage, VBA

mag ich nicht / gruselig
C++, Perl, Brainfuck ;-),

Es ist natürlich irgend irrational. Nur wenn ich die Wahl habe, nehme ich lieber die ich mag.

Was ich aber ganz klar mag. Interaktive Entwickliungsumgebungen, wo man einfach mal was ausprobieren kann, ich schätze auch gute Debugger und dann die Möglichkeit Teile es Code genauer zu untersuchen (wahrscheinlich ein Grund warum ich Smalltalk so gut finde)

Und ja es ist klar eine Präferenz für OO vorhanden. Offenbar kommt es meiner Gedankenwelt am Nächsten. Wie geht es Ihnen?

Microsoft und der Umgang mit Progammierern

Erstaunt mich:
https://www.heise.de/developer/meldung/Gute-und-schlechte-Nachrichten-fuer-Visual-Basic-NET-Entwickler-4682163.html

Wenn man bedenkt was Visual Basic alleine schon für die Popularität der Entwickliung auf Windows brachte. Dann tritt man diesen Leuten mit Visual Basic Net auf die Zehen und keine 20 Jahre später, tritt man den Basic Fans noch mal mit Schmackes in’s Gemächt.

Bin mal gespannt was aus dem dann hier wird:
https://www.twinbasic.com/

Wenn man bedenkt, ehemals war das Mantra: Entwickler, Entwickler und nocht mehr Entwickler. Die man sicher mit VB bekam und dann so etwas …

Marktführerschaft kann nett sein, aber für die sich darauf eingeschossen haben …

An die Programmierer unter meinen Lesern,

so es Sie denn geben sollte.

An die Programmierer oder an Programmierung interessierten unter meinen Lesern. Kleiner Hintergrund: Ich kenne inzwischen eine ganze Menge Programmiersprachen, manche davon benutze ich intensiv, manche habe ich intensiv benutzt und bei anderen habe ich es immer mal wieder versucht, manche kann ich ganz gut lesen und schreiben, manche verstehe ich so gerade, manche mag ich und ein paar Kandidaten eher nicht.

Nun bin ich nach längerer Zeit auch mal wieder auf den Gebrauch von Common LIsp, gekommen, ich hab auch meine Emacs ordentlich gepimpt und was soll ich sagen – es rockt

Meine Firma hat mal eine Zeitlang LIspWorks vertrieben: http://www.lispworks.com/ Gestern habe ich mir auch mal AllegroCL auf meinem Rechner installiert.

Da ich einige Jahre CL gar nicht benutzt habe, muß ich festhalten: Es hat sich einiges zum besseren gewendet (was mich freut)

Wie auch immer, gestern stolper ich über eine Anwendung, die ich vor ungefähr 15 Jahren geschrieben habe und ich dachte mir, schau mal was da noch geht und zu meinem größten Erstaunen, brauchte ich nur das Tools installieren (in diesem Falle Lispworks Personal Edition) und bekam ein CAPI – Programm (das ist das GUI von Lispworks ) auf Linux und Windows zum Lauren. Das war erfreulich und interessant.

Nun habe ich auch bei diversen “Challenges” mitgemacht und treibe mich auch in wirklich “obskuren” Ecken herum (wem sagt CLIM etwas?)

Was ich aber immer mal wollte war ein Buch mit vielen Implementierungen in diversen Programmiersprachen. Es gibt ein Buch wo das mal ansatzweise versucht wurde “Beautiful code” aber dort gibt es eben nicht ein Beispiel und nun möchte ich Sie und mich herausfordern, ich gedenke eine Seite in’s Netz zu stellen wo genau eine Anwendung implementiert wird mit “Challanges” dann daran Änderungen zu übernehmen.

Im Augenblick denke ich an 3 Schnittstellen
1) CLI
2) GUI
3) Web

An diverse Arten von Speicherung der Daten
1) plain files
1.1) in welchem Format auch immer
1.2 ) in sagen wir mal CSV, JSON etc
2) Databases
3) was auch immer (Smalltalks images….)

Die Daten sollen verschlüsselt werden und es sollte möglich sein daraus die Daten an den WebBrowser zu übermittteln.

Was dann aber auch kommt. Interfacing mit anderen Sprachen egal wohin, aber es soll z.B. möglich sein, die sagen wir mal CL Strukturen aus einer andereen Sprache zu benutzen, Wie einfach schwierig ist es.

Bewertet wird die Software von den Besuchern der Seite wo ich das alles Sammeln möchte.Unter anderem
– Fehleranfälligkeit
– Lesbarkeit
– Adaptionsfähigkeit
– Tests
– Installation
– Implementierungszeit
– Wartbarkeit
– Sicherheit

Das ganze soll länger laufen, es kommt eben auf die Herauforderungen und deren Umsetzung an. Vielleicht kennt jemand die Language Shootout Seiten, dort ging es aber nur im Speed, Das will ich gar nicht “klein” reden, nur darum geht es mir nicht. Ich möchte einfach eine Anwendung auf möglichst viele Weisen implementiert sehen, um einfach mal zu zeigen, wie interessant das sein kann

Den Zeitaufwand kann ich nicht “beziffern”, damals habe ich vielleicht einen Tag oder so gebraucht – keine Ahnung. Kannte das ja einfach nicht

Mich faszinieren Programmiersprachen und ich bin speziell dafür sich auch die Nicht-Mainstream Sprachen anzuschauen. Ich kann mir nicht vorstellen, daß ich damit alleine bin. Wäre da jemand evtl interessiert?

Anwendung: Speicherung von Zugangsdaten mit “natürlich” Verschlüsselung, export/import dieser Daten in diversen Formaten,

Für Interessierte

Ich verfolge die “offiziellen” Zahlen von hier: https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6

In der angefügten Tabelle habe ich darau seien Exponentieleln Angleichung berechnern lassen die leider sehr genau stimmt.

Für die Quualität der Zahlen kann ich keinerlei Gewähr übernehmen, nur schreiben, die Formeln ergeben sich aus den geposteten Zahlen. Was extrem auffällt, ist die Abweichung der CRF und der CRF(t), danach sind wir in D ein Land der am wenigsten von Tod betroffenen durch Corona.

Achtung bei den Toten ist festzuhalten. Wer es hat und stirbt wird als Corona Toter gewertet – auch in D!

Corvid-Tabelle-2020

Nun mal zu was ganz Neuem

Jedenfalls für mich den Autor. Ein “bisschen” Geschichte um es einordnen zu können.  Ich bin einer der frühen Nutzer von Linux. Angefangen habe ich mit irgendwas unter 1. Das dürfte nun mehr als sogar 30 Jahre her sein. Mitgemacht habe ich seit der Installatoin mit den kleinen Floppies. Keine Ahnung ob noch jemand weiß, was das war. Angefangen habe ich mit irgendwas von Suse oder so – IIRC. Nun nach einiger Zeit landete ich bei Debian (genau so um 1998) herum. Seitdem bin ich intensiver Debian und neuerdings auch Ubuntu  Benutzer. Das Ubunti kam auf dem aktuellen Rechner drauf den ich gerade benutze weil irgendwas in Debian mit dem X-Window nicht klappte. Also mal ‘ne Ubuntu probiert.

Ich kann hauptsächlich gutes zu Debian sagen. Ein wirklich solides System mit einem ganz erstaunlichen Paket-system. Es gibt wirklich selten Probleme selbst mit einem Systemupgrade. Was ich speziell benutze ist VirtualBox, das ist wirklich auch beruflich wichtig für mich, da die Software meiner Firma auf Windows  läuft. Ich war eine lange Zeit Benutzer von vmware und habe dafür auch gut bezahlt. Weiterhin habe ich einige Software auch auf Linux gekauft. Ich administriere selber noch einige Linux Rechner für Familie, Kunden und auch die PDV. Ich denke wer so lange Linux benutzt und auch von Floppies noch installiert, der findet sich passabel bis gut zurecht.

Allerdings habe ich schon immer meine persönlichen Problem mit der GPL, https://www.gnu.org/licenses/gpl-3.0.html. Diese behauptet zwar für “Freiheit” zu sein. Fakt ist aber man wird durch Sie und deren Gebrauch sehr eng gebunden. Ja Sie können, die Quellen einsehen und ja Sie können die auch beliebig verändern und nein das können Sie im Grunde nicht für sich behalten. Freiheit ist nicht nur die Freiheit etwas nutzen zu dürfen sondern auch mit dem genutzten zu machen was man will. Die GPL schränkt das ein. Für mich ist das nicht zum Guten.

Es ist aber auch so, daß fast jeder irgendwo mit einem Linux Kontakt hat und ich denke wenn ich schreibe 80 % des Internet basieren auf Linux ist das nicht übertrieben. Linux ist wirklich überall und inzwischen sehr sehr gut geworden. Ohne Zweifel und ich gratuliere den Leuten die das auf die Beine gestellt haben uneingeschränkt.

Debian ist sehr konsequent was Fremdsoftware und “proprietäre” Sachen angeht. Das kann man schätzen, muß man aber nicht. Ich schätze es nicht so sehr. Daher wolle ich immer schon was freieres ausprobieren und das habe ich zwischen drin mal versucht. Die noch freieren System sind BSD System davon gibt es sicher  mehr als 3 aber die bekanntesten sind:

FreeBSD: https://www.freebsd.org/de/
OpenBSD: https://www.openbsd.org/
NetBSD: https://www.netbsd.org/

Man kann wohl schreiben FreeBSD ist da mit den meisten Installationen. OpenBSD nimmt für sich in Anspruch eines der sichersten Linux Systeme überhaupt zu sein, NetBSD behaupte, egal was es an Hardware gibt es NetBSD wird schon drauf laufen.
Man siehe auch: https://www.unixmen.com/freebsd-vs-openbsd/

Die Lizenz von FreeBSD kann man hier anschauen: https://www.freebsd.org/copyright/freebsd-license.html

Das ist definitiv freier, der COC (code of conduct) hingegen ist wohl feministischer Dreck (irgendwas ist ja immer) . Ich denke das mit dem Dreck könnte hinkommen:

Some FreeBSD Project spaces may have additional rules in place, which will be made clearly available to participants. Participants are responsible for knowing and abiding by these rules. Harassment includes but is not limited to:

  • Comments that reinforce systemic oppression related to gender, gender identity and expression, sexual orientation, disability, mental illness, neurodiversity, physical appearance, body size, age, race, or religion.
  • Unwelcome comments regarding a person’s lifestyle choices and practices, including those related to food, health, parenting, drugs, and employment.
  • Deliberate misgendering.
  • Deliberate use of “dead” or rejected names.
  • Gratuitous or off-topic sexual images or behaviour in spaces where they’re not appropriate.
  • Physical contact and simulated physical contact (e.g., textual descriptions like “*hug*” or “*backrub*”) without consent or after a request to stop.
  • Threats of violence.
  • Incitement of violence towards any individual, including encouraging a person to commit suicide or to engage in self-harm.
  • Deliberate intimidation.
  • Stalking or following.
  • Harassing photography or recording, including logging online activity for harassment purposes.
  • Sustained disruption of discussion.
  • Unwelcome sexual attention.
  • Pattern of inappropriate social contact, such as requesting/assuming inappropriate levels of intimacy with others.
  • Continued one-on-one communication after requests to cease.
  • Deliberate “outing” of any private aspect of a person’s identity without their consent except as necessary to protect vulnerable people from intentional abuse.
  • Publication of non-harassing private communication without consent.
  • Publication of non-harassing private communication with consent but in a way that intentionally misrepresents the communication (e.g., removes context that changes the meaning).
  • Knowingly making harmful false claims about a person.”

Das hat m.E. bei Software nichts verloren.

Dieses FreeBSD habe ich auf einem Notebook installieren können und werde und will mal sehen wie ich damit hinkomme.

Wenn Sie mal einen Blick in Debian und FreeBSD werfen wollen, dann schauen Sie in die Handbücher:
Debian: https://www.debiananwenderhandbuch.de/
FreeBSD: https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

Ich persönlich halte einige in Debian für falsch: So die Umstellung auf systemd. Ich bin der Meinung gerade bei Unices sollte KISS immer gelten und eingehalten werden. Einfach halten und das “einfachste” was ich kenne und was sicher noch auch in 100 Jahren funktionieren wird, sind Textdateien. Wir werden zig-hundertausende Dateiformate nicht mehr lesen können aber eine Textdatei wird auch in 100 Jahren noch funktionieren.

Mein neues Abenteuer heißt also: FreeBSD verstehen und nutzen lernen. Mal schauen wo das hinführt.

Gleich mal in 2 Probleme: 1) Ich weiß noch nicht wie ich von da werde drucken können
2) die Firewall regeln laufen gleich mal wieder anders und müssen anders konfiguriert werden.

 

My take on it

https://martinfowler.com/articles/is-quality-worth-cost.html

I maintain some software for around 8 years now. And I just can tell from that: Organize your code and rewrite if it has some quality. The software I have, works but is terrible hard to extend and the really realyl big problem. I do have to add this extensions over and over again. At least if it’a about order, I’ have 4 different areas which nearly are the same to change. That makes it terrible and you can bet, I’ll oversee one area nerly always.

Be very carefula bout redundancy, but don’t get folled and think it’s always bad, but if it’s in more then three places, you are in deep trouble.

Yes quality matters and it’s worth it. It’s worth your time and it will hamper the further development if you don not care about it deeply.