Archiv der Kategorie: IT

That really was helpful.

I struggled with some „profane“ text edit duties, but well, in
over 100 files, and as a programmer … you know what we do.
Spend 3 hours to save repeating a task a few hundred times 😉

My problem, I had to match [[SomeContent]]
And I had an assoc list

setq 'assoc-listt'(("Key-1", "Value1"
                    ("SomeContent", "Some Link to")

I did not get the regular expression right, ChatGPT did it:

(defun my-function ()
  (interactive)
  (with-temp-buffer
    (insert-file-contents "filename.txt")
    (goto-char (point-min))

    ;; Search and replace
    (while (re-search-forward "\\[\\[\\(.*?\\)\\]\\]" nil t)
      (let* ((match (match-string 1))
             (value (cdr (assoc match some-alist))))
        (when value
          (replace-match (format "[[file://%s][%s]]" value match) nil t nil 1))))))

Just one problem the last 1 , that lead to the non replacement of [[ and]] replace it with zero and you’re fine. With some stuff around, with some saving of buffers, did I get what I wanted.
It’s always nice if you can program your editor, and I doubt there is anything as programmable as an Emacs 😉

Thanks for the fish – ah sorry code …

Quite interesting

That so many seem to dislike C. Yes it has its shortcomings, but it’s one of the simpler languages overall, and it deserves the name „portable Assembler“. C runs everywhere, and C has built everything we are using today. Every wider used Operating System was mostly written in C. It starts with every Unix under the sun. It’s the foundation of Windows. There may be OSes out there not written in C, but I probably know just one Genera. C allows you to manipulate bits, and that’s as low as it can get.

Nearly any Database is written in C, be it the old ones, be it the new ones. There’s some kind of C compiler on every OS. It’s the lingua franca of the IT-Industry as we know it.

Let’s wait and see if if finds a descendant, there are candidates for that, one can doubt it will bet C++.

Whatever language you use, I strongly suggest you learn C too. I doubt you will never get in touch with it, and be it just to wrap some C-API for your programming language you’re currently using.

Just for the curious

and those which don’t think MS is just the evil empire per se:
https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/

Just imagine how hard they work to get better. Yeah, they sometimes fail, but overall, they have made the PC a think everyone wants. I remind you of my critique about the dead of Visual Basic. Just imagine they have spent just a hundredth of the time they put into .NET.

It just reminds me of one thing, I think, which covers it all, see:
https://www.youtube.com/watch?v=Vhh_GeBPOhs.

VB has done more for developing more software as many other tools combined (exception might be TurboPascal) . And it’s terrible lacking in/with languages like Smalltalk, Common Lisp etc. I will never understand why one kills such a cash cow.

But they did a remarkable job with .NET, and they really spent literally Millions or even Billions on it. Anyway, I don’t know about the prices for the development environment alone because I’m buying them all at around 1500 – 1700 € / year. And so, I can use whatever I want. I know at least that VB was not in that price class, I, personally, think that dropping that was an error. Of course, I might be wrong

That’s a decent suggestion


PROCEDURE assertNoDuplicatesInTableRow(tblControl is Control,  cbColName is Control, vOldValue is Variant, sDialogText is string )

nFoundIndex					is int
nRetValDialog, nRetValInput	are int
vSearchValue, vNewValue		is string
vSearchValue	= cbColName

nFoundIndex		= TableSearch(cbColName, vSearchValue)

WHILE ((nFoundIndex > 0) AND  (nFoundIndex <> tblControl))
	nRetValDialog =  Dialog(sDialogText, ["Change", "Cancel"], 1, 2)
	IF (nRetValDialog = 1) THEN
		nRetValInput = Input("New value", vNewValue)
		IF nRetValInput = 2 THEN
			MySelf = vOldValue
			BREAK
		ELSE
			nFoundIndex = TableSearch(cbColName, vNewValue)
			IF nFoundIndex = tblControl THEN
				MySelf = vNewValue				
				BREAK
			END
		END
	ELSE
		MySelf = vOldValue
		BREAK
	END		
END



Asked ChatGPT to refactor ist:
Answer: Get rid of the loop and recall recursivly.

IF nFoundIndex > 0 AND nFoundIndex <> tblControl THEN Dialog(„Duplicate value found. Please enter a different value.“, [„OK“], 1, 1) assertNoDuplicatesInTableRow(tblControl, cbColName, vOldValue, sDialogText) ELSE MySelf = vNewValue END

That of course not WLanguage bu thte idea is decent:
One can write it this way:


PROCEDURE assertNoDuplicatesInTableRow(tblControl is Control,  cbColName is Control, vOldValue is Variant, sDialogText is string )

nFoundIndex					is int
nRetValDialog, nRetValInput	are int
vSearchValue, vNewValue		is Variant
vSearchValue	= cbColName

nFoundIndex		= TableSearch(cbColName, cbColName)

IF ((nFoundIndex > 0) AND  (nFoundIndex <> tblControl)) THEN
	nRetValDialog = Dialog(sDialogText, ["Change", "Cancel"], 1, 2)
	IF nRetValDialog = 2 THEN
			MySelf = vOldValue
	ELSE
		nRetValInput = Input("New value", vNewValue)
		IF nRetValInput = 2 THEN
			MySelf = vOldValue
			// BREAK
		ELSE
			cbColName.Value = vNewValue
			assertNoDuplicatesInTableRow(tblControl,cbColName, vOldValue, sDialogText)			
		END
	END
		
END

//WHILE ((nFoundIndex > 0) and  (nFoundIndex <> tblControl))
//	nRetValDialog =  Dialog(sDialogText, ["Change", "Cancel"], 1, 2)
//	IF (nRetValDialog = 1) THEN
//		nRetValInput = Input("New value", vNewValue)
//		IF nRetValInput = 2 THEN
//			MySelf = vOldValue
//			BREAK
//		ELSE
//			nFoundIndex = TableSearch(cbColName, vNewValue)
//			IF nFoundIndex = tblControl THEN
//				MySelf = vNewValue				
//				break
//			END
//		END
//	ELSE
//		MySelf = vOldValue
//		BREAK
//	END		
//END
//
//

Is it better? Well, it avoid a loop with different places where one has to break it
It avoids a double call to TableSearch, but replaces it with a recursive call

Other really good suggestions:

function to avoid a double in a two dimensional array

You can use a loop to iterate over the elements in the two-dimensional array and check if a given value already exists. Here’s an example implementation in C#:

csharpCopy codepublic bool CheckIfValueExistsInArray(int[,] array, int value)
{
    for (int i = 0; i < array.GetLength(0); i++)
    {
        for (int j = 0; j < array.GetLength(1); j++)
        {
            if (array[i, j] == value)
            {
                return true;
            }
        }
    }
    return false;
}

In this example, the CheckIfValueExistsInArray method takes in a two-dimensional integer array and a value to check for. It then iterates over each element in the array using two nested loops, comparing each element to the given value. If a match is found, the method returns true. If the loop completes without finding a match, the method returns false.

You can call this method to check if a value already exists in a two-dimensional array before inserting a new value. You can then decide whether or not to insert the new value based on the return value of the method.

And:

How can I avoid the double loop in the suggested code?

If you want to avoid using nested loops, you can use the Array.IndexOf method to search for the value in a flattened version of the two-dimensional array. Here’s an example implementation:

csharpCopy codepublic bool CheckIfValueExistsInArray(int[,] array, int value)
{
    int[] flattenedArray = new int[array.GetLength(0) * array.GetLength(1)];
    Buffer.BlockCopy(array, 0, flattenedArray, 0, flattenedArray.Length * sizeof(int));
    return Array.IndexOf(flattenedArray, value) != -1;
}

In this example, the CheckIfValueExistsInArray method takes in a two-dimensional integer array and a value to check for. It creates a new one-dimensional integer array with the same number of elements as the two-dimensional array by using Buffer.BlockCopy to copy the elements from the two-dimensional array to the new array. It then uses the Array.IndexOf method to search for the value in the flattened array. If the value is found, the method returns true. If the value is not found, the method returns false.

Note that this approach has some overhead because of the need to create a new flattened array, so it may not be faster than using nested loops for very small arrays. However, it can be more concise and easier to read for larger arrays.

Warum?

Was genau kann jemanden dazu bewegen, die Groß/Kleinschreibung von
Prozeduren/Methoden vorzugeben, was ist daran gut jedes Verb in Großbuchstaben zu schreiben? Und dann noch in Englisch.

Hier normaler englischer Text:

A grasshopper spent the summer hopping about in the sun and singing to his heart’s content. One day, an ant went hurrying by, looking very hot and weary.

„Why are you working on such a lovely day?“ said the grasshopper.

„I’m collecting food for the winter,“ said the ant, „and I suggest you do the same.“ And off she went, helping the other ants to carry food to their store. The grasshopper carried on hopping and singing. When winter came the ground was covered with snow. The grasshopper had no food and was hungry. So he went to the ants and asked for food.

„What did you do all summer when we were working to collect our food?“ said one of the ants.“

Wieso verlangt man in C#, daß Methoden groß geschrieben werden sollen:
Console.WriteLn(“ ..

Was für eine Aussehen, da bekommt man doch das Grausen und bei Go ist es „obligatorisch“
In Go, a name is exported if it begins with a capital letter. For example, Pizza is an exported name, as is Pi, which is exported from the math package.‘

WT …?

Es gibt sicherlich gute und schlechte Ideen und das ist in meinen Augen schlecht.

Bin mir darüber im Klaren

Man sollte nicht darüber lachen oder sich beschweren. X11 datiert zurück nach 1984 und es ist ein Protokoll auch für die Darstellung GUI über Leitungen von 300 Bit/s . Die Bedingungen, unter denen das laufen musste, kann man heute nicht mehr verstehen oder nur Leute, die kleinste Computer programmieren. Es macht einen Unterschied, ob man da 10 Byte oder 3 Bit übertragen muß.

Die Beschränkungen waren brutalst und jedes bisschen Leistung muß man herausquetschen. Aber natürlich von heute ausgehen, sind des APIS zum Davonlaufen, aber das teilt X11 durchaus mit der Win-API. Es waren andere Zeiten und es tut und durchaus gut, uns auch mit so was zu beschäftigen …

Was ich nicht verstehe

wie Microsoft ein so populäres Programm wie Visual Basic kaputt machte. Wenn man auch bedenkt, der Erfolg von MS war auch in einem Basic begründet. Es ist nun mehr als 20 Jahre, her und trotzdem gibt es immer noch Leute, die es benutzen.

Wieso man das nicht adaptiert und auf .NET brachte, ich habe wirklich keine Ahnung … Warum killt man eine Cash Cow? Ich meine, von unseren Politikern kann man nichts Besseres erwarten, aber von einer Firma, die sich derartige Mühe gibt, auch noch alle Software zum Laufen zu bringen.

Siehe: https://devblogs.microsoft.com/oldnewthing/

Und sie machen es wieder:
https://www.heise.de/developer/meldung/Gute-und-schlechte-Nachrichten-fuer-Visual-Basic-NET-Entwickler-4682163.html

Ich möchte gerne ein paar Stäbe brechen

Für in meinen Augen wunderbare Programmiersprachen, die leider kaum bekannt und benutzt werden. Libraries machen den Nutzen von allen Sprachen aus. Egal, wie schön eine Sprache ist, ohne Libraries ist sie leider nutzlos. Hier also ein paar Vorschläge
1) Common Lisp. Eine der derzeit am stärksten unterschätzten Sprache in den 80-er Jahren des letzten Jahrtausends gab es ganze Betriebssysteme, die in eine Lisp Dialekt geschrieben wurde. Das Emacs Lisp begleitet uns nun seit mehr als 30 Jahren, ein Ende ist nicht absehbar. Schemes gibt es sehr viele und auch noch ein paar andere weniger bekannte Lisps. Wenn Sie Glück und Können haben, bekommen die dieses BS auf Linux zum Laufen

https://archives.loomcom.com/genera/genera-install.html

Downloads / Homepages: https://www.sbcl.org/ http://www.lispworks.com, http://www.franz.com, https://franz.com/
2) Smalltalk. Eine der ersten Durch- und Durch Sprachen auf der Basis von Objekten. Heute immer noch unerreicht. Leider fast vollkommen vergessen im Lichte von Nachfolgern wie Python, C#, Java, JavaScript, C++. Smalltalk teilt mit Common Lisp die Eigenschaft, eine programmierbare Programmiersprache zu sein. Es gibt wenige andere Sprachen, mit denen man die Sprache selber so erweitern kann. So kann man z.B. neue Schleifenarten ohne Probleme zu diesen Sprachen hinzufügen.

Downloads: https://pharo.org/, https://squeak.org/, https://www.instantiations.com/,
https://www.gnu.org/software/smalltalk/

Die „Schwäche“ der beiden Sprachen aus Sicht von vielen sind fehlende statische Typen. Interessanterweise teilen sie das mit Python, was derzeit aber eine der am meistgebrauchten Programmiersprachen ist

3) Io . Ich bezweifele, daß es mehr als 1000 aktive Benutzer gibt. Die Einfachheit dieser Sprache ist besser als bei Smalltalk. Hier können Sie es sich anschauen: https://iolanguage.org/
Mehr gibt es nicht. Hier eine Idee wie es aussehen kann:

 cc := method(System getEnvironmentVariable("CC") ifNilEval(return "cc"))
    cxx := method(System getEnvironmentVariable("CXX") ifNilEval(return "g++"))
    ccOutFlag := "-o "
    linkdll := cc
    linkDirPathFlag := "-L"
    linkLibFlag := "-l"
    linkLibSuffix := ""
    linkOutFlag := "-o "
    linkLibSuffix := ""
    ar := method(System getEnvironmentVariable("AR") ifNilEval(return "ar"))
    arFlags := "rcu "
    ranlib := method(System getEnvironmentVariable("RANLIB") ifNilEval(return "ranlib"))


includes = includes appendSeq(headerSearchPaths) map(v, "-I" .. v)

 iocFiles := sourceFiles select(f, f name beginsWithSeq("Io") and(f name endsWithSeq(".c")) and(f name containsSeq("Init") not) and(f name containsSeq("_") not))

Es ist sehr im Smalltalk Sinn gehalten. Object message ist der Weg. Es gibt keine speziellen Klassen. Alles kann eine Klasse sein, aber alles ist ein Objekt. M.E. ist die Implementierung eine der besten (im Sinne von lesbarsten) , die ich bisher fand.

Vielleicht stelle ich auch noch ein paar andere Sprachen vor, die mich auf die eine oder andere Weise beeindruckten….

Genugtuung

Für einige Programmierer. Es gibt eine völlig unterschätzte Sprache, Lisp in diversen Varianten. Ein Beispiel was ein Lisp kann, aber nicht viele andere Sprachen:

(defmacro define-advice (symbol args &rest body)
  "Define an advice and add it to function named SYMBOL.
See `advice-add' and `add-function' for explanation on the
arguments.  Note if NAME is nil the advice is anonymous;
otherwise it is named `SYMBOL@NAME'.

\(fn SYMBOL (WHERE LAMBDA-LIST &optional NAME DEPTH) &rest BODY)"
  (declare (indent 2) (doc-string 3) (debug (sexp sexp body)))
  (or (listp args) (signal 'wrong-type-argument (list 'listp args)))
  (or (<= 2 (length args) 4)
      (signal 'wrong-number-of-arguments (list 2 4 (length args))))
  (let* ((where         (nth 0 args))
         (lambda-list   (nth 1 args))
         (name          (nth 2 args))
         (depth         (nth 3 args))
         (props         (and depth `((depth . ,depth))))
         (advice (cond ((null name) `(lambda ,lambda-list ,@body))
                       ((or (stringp name) (symbolp name))
                        (intern (format "%s@%s" symbol name)))
                       (t (error "Unrecognized name spec `%S'" name)))))
    `(prog1 ,@(and (symbolp advice) `((defun ,advice ,lambda-list ,@body)))
       (advice-add ',symbol ,where #',advice ,@(and props `(',props))))))

Man muß dazu schon, was mir AOP anfangen können, um da mitzuziehen. Und das ist Standard in so gut wie jedem Lisp. Im Beispiel ist es Emacs-Lisp eine Programmiersprache so alt wie der Emacs selber, also seit 1984 (und das sind nun 2023 – 1984 = 39 Jahre). Und Lisp ist noch älter, es war immer schon eine programmierbare Programmiersprache. Neue spezielle Schleifen – check. Einseitige Fallunterscheidungen wie when und unless – check.

Viele lachen über Lisp, aber nur noch wenige wissen, was Lisp Machines waren und was die boten.

Lispprogrammierer kann man mit Liberalen in der Politik vergleichen 😉

An die Programmierer

zu denen auch ich gehöre. Ich finde, für uns sind die Zeiten besser als je. So viele Sprachen, aus denen man auswählen kann, teilweise mit einer traumhaften Infrastruktur. Als ich anfing, gab es
kein Java, kein C#, kein F#, kein JavaScript, kein PHP, kein Python, kein Ruby, kein Rust, kein Go und was weiß ich, was alles noch dazu gekommen ist.

Bei uns gab es C, Modula-2, Pascal, Basic, Fortran, Cobol und Ähnliches. Die IDEs damals waren definitiv nicht so ausgefuchst wie heute. Wir hatten die Wahl, aber die war weitaus beschränkter als derzeit. Es ist auch so viel an neuer Software dazu gekommen, es ist geradezu atemberauben.

Wäre die politische Entwicklung nur halb so schön gewesen, bräuchte ich mir keinerlei Gedanken über das Auswandern machen …

Ich schlage vor, wir genießen die Auswahl und programmieren, worin auch immer wir Spaß haben…

I agree

It’s stupid not to use some software, because in what it is written. Of course I have my favourites, and special dislikes. But that is not what I see as a user. If the software does what it should – it’s fine.

What try to avoid is of course using a programming language for programming if I do not like it.
And I have a special distaste of C++ and Perl. Partly Tcl ( I simply do not like the set x val) Of course it is stupid. Strange enough I find C a wonderful language.
Now I’m currently learning Java and I’m quite sure I will use it for further programm development. I want to learn and use other languages but many are terrible for application development. You want a decent debugger and decent toolbos. This is not a given for quite a few languages I like.

E.g I’d like to use Pharo Smalltalk more intensivly, but they break code way too often. As a application developer I hate that, and for that I have to like VBA, because it simply works since at least two decades. Code you once wrote, still works. Every language which breaks code too often is very much a no-go for me. What I need is help with building GUI and Reports. If that’s not there I an’t use it….

Ich habe eine Schwäche für

Smalltalk der Programmiersprache. Was mich aber unglaublich ärgert, ist die Problematik von neuen Versionen zum Beispiel bei Pharo Smalltalk. Die Entwicklungsversion ist 11, daran läuft aber alles Mögliche nicht mehr sei Moose, Seaside oder. Was genau denken sich die Entwickler, wenn Sie mit neuen Versionen alte Software nicht mehr laufen lassen können.

Das ist IMHO eine ganz schlechte Idee und es ist ein Grund, warum ich immer noch C mag. So etwas passiert Ihnen in C nicht! Es passiert Ihnen auch in VBA so schnell nicht und es passiert Ihnen auch eher nicht in kommerziellen Smalltalks.

Ich verstehe, wenn man Fehler beheben will, ich verstehe, wenn man etwas anders implementiert, aber ich verstehe nicht, wie man Anwendungsentwickler so hängen lässt.

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.