Open-sourcen der Buchbeispiele vom Löffelmann

    • VB.NET
    • .NET 4.5

    Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von loeffel.

      Open-sourcen der Buchbeispiele vom Löffelmann

      Hallo Alle,

      ich bin neu hier, und wollte mich erstmal vorstellen.

      Mein Name ist Klaus Löffelmann, und ich habe in einem früheren Leben mal für Microsoft Press Bücher geschrieben.

      Ich fand es echt süß, wie das, was ich vor langer Zeit mal geschrieben habe, hier ab und an noch (als "der Löffelmann", hihi...) weiterempfohlen wird, und hoffe, dass es einigen Developern hier, die Visual Basic (zu Recht! :) ) immer noch die Stange halten, vielleicht hier und da weiter geholfen hat. Und auch noch weiterhelfen wird!

      Ich glaube auch, dass die Beispieldateien auf den offiziellen Quellen nicht mehr zu bekommen sind, und deswegen dachte ich, dass es vielleicht eine gute Idee wäre, alle Beispiele auf GitHub als wirklichen (auch rechtlich) Open Source zu veröffentlichen. Und genau das habe ich gerade gemacht. Denn vielleicht findet sich sogar noch der eine oder andere, der Lust hat, die Beispiele zu ergänzen?

      Jedenfalls war das eine recht spontane Aktion, deswegen stehen die Dateien erstmal nackt ohne weitere Kommentare auf dem GitHub Repo. Aber sie sind auf alle Fälle erstmal da. Und ehrlich gesagt, und da bin ich auf eure Meinung gespannt, denke ich auch darüber nach, das Buch selbst zu open sourcen, sodass im Community Effort vielleicht ein richtig cooler aktueller Titel daraus entstehen könnte. (Die Idee, es zu CSharp zu "übersetzen", die irgendjemand neulich hatte, fand ich übrigens auch nicht schlecht.)

      So, in diesem Sinne, hier der Link.
      github.com/KlausLoeffelmann/VB-DasEntwicklerbuch

      UPDATE:
      Basierend auf Vorschlägen von @ErfinderDesRades und @Marcus Gräfe gibt es ein paar Änderungen/Ergänzungen:
      • GitHub Repo ist umbenannt in VB-DasEntwicklerbuch (siehe geänderter Link oben), da sich die...
      • Begleitdateien vom VB2005-Das Entwicklerbuch sowie
      • Begleitdateien vom VB2003-Das Entwickler
      nun ebenfalls im Github Repo befinden.

      Für all die, die sich noch nicht so sehr mit GitHub auskennen:

      Hier könnt ihr euch die gezippten Dateien aller Bücher herunterladen:
      github.com/KlausLoeffelmann/VB…erbuch/archive/master.zip

      Die Zips der Begleitdateien befinden sich aber auch nochmal im Anhang.

      Liebe Grüße

      Klaus
      Dateien

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „loeffel“ ()

      @loeffel Willkommen im Forum. :thumbup:
      Leider bin ich zum Glück ohne Dein Buch aufgewachsen, deshalb steht es mir nicht zu, da eine Wertung abzugeben.
      Ich hab mir mal fix das VB2010Samples/Kapitel 08 - Einführung OOP/MiniAdressoProzedu/ angesehen und den Code nach meinen Gesichtspunkten überarbeitet:
      • 4 Arrays von Adress-Elementen ersetzt durch die Instanz einer Adress-Liste
      • Zugriff auf die Elemente der Liste
      • Adress-Klasse überarbeitet
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Module Hauptmodul
      2. Private Adressen As New List(Of Adresse)
      3. Sub Main()
      4. Dim ersteAdresse As Adresse
      5. ersteAdresse = New Adresse("Klaus", "Löffelmann", "59556", "Lippstadt")
      6. ersteAdresse.Nachname = "Müller"
      7. ersteAdresse.Vorname = "Klaus"
      8. Dim zweiteAdresse As New Adresse
      9. zweiteAdresse.Nachname = ersteAdresse.Nachname
      10. zweiteAdresse.Vorname = ersteAdresse.Vorname
      11. zweiteAdresse.PLZ = ersteAdresse.PLZ
      12. zweiteAdresse.Ort = ersteAdresse.Ort
      13. Console.Write(ersteAdresse.Nachname + ", " + zweiteAdresse.Nachname)
      14. Console.ReadKey()
      15. 'Hier 'mal darstellungsmäßig was Anderes im Konsolenfenster
      16. Console.BackgroundColor = ConsoleColor.White
      17. Console.ForegroundColor = ConsoleColor.Black
      18. Console.Clear()
      19. 'Zufallsadressen generieren
      20. Console.Write("Zufallsadressen werden generiert ... ")
      21. ZufallsAdressenGenerieren()
      22. Console.WriteLine("fertig!")
      23. 'Die ersten 10 Zufallsadressen ausgeben
      24. AdressenAusgeben(0, 10)
      25. 'Die Adressen sortieren
      26. Console.WriteLine()
      27. Console.Write("Adressen werden sortiert ... ")
      28. AdressenSortieren()
      29. Console.WriteLine("fertig!")
      30. Console.WriteLine()
      31. 'Und jetzt nochmal die ersten 10 Zufallsadressen ausgeben
      32. AdressenAusgeben(0, 10)
      33. 'Warten, bis das Programm beendet ist.
      34. Console.WriteLine()
      35. Console.WriteLine("Taste zum Beenden drücken...")
      36. Console.ReadKey()
      37. End Sub
      38. Sub AdressenAusgeben(ByVal von As Integer, ByVal bis As Integer)
      39. For c As Integer = von To bis
      40. Console.WriteLine("{0:000}: {1}", c, Adressen(c))
      41. Next
      42. End Sub
      43. Sub AdressenSortieren()
      44. 'Beispiel für lokalen Typrückschluss
      45. Dim anzahlElemente = 101
      46. Dim delta = 1
      47. Dim aeussererZaehler As Integer
      48. Dim innererZaehler As Integer
      49. Dim tempAdresse As Adresse
      50. 'Größten Wert der Distanzfolge ermitteln
      51. Do
      52. delta = 3 * delta + 1
      53. Loop Until delta > anzahlElemente
      54. Do
      55. 'Späteres Abbruchkriterium - entsprechend kleiner werden lassen
      56. delta \= 3
      57. 'Shellsort's Kernalgorithmus
      58. For aeussererZaehler = delta To anzahlElemente - 1
      59. tempAdresse = Adressen(aeussererZaehler)
      60. innererZaehler = aeussererZaehler
      61. Do
      62. If tempAdresse.Nachname >= Adressen(innererZaehler - delta).Nachname Then
      63. Exit Do
      64. End If
      65. Adressen(innererZaehler) = Adressen(innererZaehler - delta)
      66. innererZaehler = innererZaehler - delta
      67. If (innererZaehler <= delta) Then
      68. Exit Do
      69. End If
      70. Loop
      71. Adressen(innererZaehler) = tempAdresse
      72. Next
      73. Loop Until delta = 0
      74. End Sub
      75. Public Sub ZufallsAdressenGenerieren()
      76. Dim locRandom As New Random(Now.Millisecond)
      77. Dim locNachnamen As String() = {"Heckhuis", "Löffelmann", "Thiemann", "Müller", _
      78. "Meier", "Tiemann", "Sonntag", "Ademmer", "Westermann", "Vüllers", _
      79. "Hollmann", "Vielstedde", "Weigel", "Weichel", "Weichelt", "Hoffmann", _
      80. "Rode", "Trouw", "Schindler", "Neumann", "Jungemann", "Hörstmann", _
      81. "Tinoco", "Albrecht", "Langenbach", "Braun", "Plenge", "Englisch", _
      82. "Clarke"}
      83. Dim locStraßen As String() = {"Musterstraße", "Alter Postweg", "Kirchgasse", "Buchweg", _
      84. "Kurgartenweg", "Wiedenbrückerstr.", "Edison Straße", _
      85. "Weidering", "Lange Straße", "Kurze Straße", "Mühlweg", _
      86. "Kahle Gasse"}
      87. Dim locVornamen As String() = {"Jürgen", "Gabriele", "Uwe", "Katrin", "Hans", _
      88. "Rainer", "Christian", "Uta", "Michaela", "Franz", "Anne", "Anja", _
      89. "Theo", "Momo", "Katrin", "Guido", "Barbara", "Bernhard", "Margarete", _
      90. "Alfred", "Melanie", "Britta", "José", "Thomas", "Daja", "Klaus", "Axel", _
      91. "Lothar", "Gareth"}
      92. Dim locStädte As String() = {"Wuppertal", "Dortmund", "Lippstadt", "Soest", _
      93. "Liebenburg", "Hildesheim", "München", "Berlin", "Rheda", "Bielefeld", _
      94. "Braunschweig", "Unterschleißheim", "Wiesbaden", "Straubing", _
      95. "Bad Waldliesborn", "Lippetal", "Stirpe", "Erwitte"}
      96. For i As Integer = 0 To 100
      97. Dim name = locNachnamen(locRandom.Next(locNachnamen.Length - 1))
      98. Dim vorname = locVornamen(locRandom.Next(locNachnamen.Length - 1))
      99. Dim plz = locRandom.Next(99999).ToString("00000")
      100. Dim stadt = locStädte(locRandom.Next(locStädte.Length - 1))
      101. Adressen.Add(New Adresse(vorname, name, plz, stadt))
      102. Next
      103. End Sub
      104. End Module
      105. Public Class Adresse
      106. Private myNachname As String
      107. Sub New()
      108. Console.WriteLine("Der Konstruktor wurde aufgerufen")
      109. End Sub
      110. Sub New(ByVal vorname As String, ByVal nachname As String, ByVal plz As String, ByVal ort As String)
      111. Me.Vorname = vorname
      112. Me.myNachname = nachname
      113. Me.PLZ = plz
      114. Me.Ort = ort
      115. End Sub
      116. Property Nachname() As String
      117. Get
      118. Return myNachname
      119. End Get
      120. Set(ByVal value As String)
      121. value = value.TrimEnd
      122. If value.Length > 20 Then
      123. myNachname = value.Substring(0, 20)
      124. Else
      125. myNachname = value
      126. End If
      127. End Set
      128. End Property
      129. Property Vorname() As String
      130. Property PLZ() As String
      131. Property Ort() As String
      132. Public Overrides Function ToString() As String
      133. Return String.Format("{0}, {1}, {2}, {3}", Me.Nachname, Me.Vorname, Me.PLZ, Me.Ort)
      134. End Function
      135. End Class
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      VB-Fragen über PN / Konversation werden ignoriert!
      Hey @RodFromGermany,

      versuch das erste Beispiel in der Kapitelreihe nicht für sich stehend, sondern im didaktischen Kontext zu sehen:
      Ich dachte mir damals so: Wer bis hierhin gekommen ist, "kann" ja noch keine Klassen, deswegen gibt es an der Stelle auch noch keine Verwendung der Dinge (wie eben Klassen) in den Beispielen, die zu diesem Zeitpunkt noch nicht stattgefunden haben.

      Ob das didaktische sinnvoll ist oder nicht, darüber lässt sich natürlich diskutieren, und ich denke, 10 Jahre später würde ich das eine oder andere sicherlich auch anders machen.

      Deswegen überlege ich auch, nicht nur die Beispiele, sondern das ganze Buch zu open-sourcen, und falls Leute Interesse daran hätten, das durch Community Effort zu aktualisieren oder wegen mir auch etwas ganz anderes daraus zu machen, dann hätte das sicherlich für viele immer noch seinen Nutzen.

      Was würdest du/ihr von der Idee halten?

      LG

      Klaus
      Danke!

      Ja, die Idee mit C# fände ich auch cool.

      Wir hatten da sogar damals bei MSPress schon mal drüber diskutiert, aber der Aufwand ist echt nicht zu unterschätzen - deswegen haben wir es damals auch nicht gemacht, und ein anderes Autorenteam hat das Buch damals vom Scratch geschrieben.

      Es müssten sich halt Leute finden, die nicht nur daran mitschreiben, sondern auch die, die mithelfen, den "Admin"-Bereich sozusagen zu übernehmen, die also dann auch PRs (Pull Requests) mit bearbeiten würden.

      Nicht nur das reine Doing ist viel Aufwand, auch Planung und Koordination. Ich selbst kann derzeit maximal ein paar Stunden pro Woche an Zeit abzwacken, da ich Vollzeit arbeite.

      Aber die Idee fände ich cool, wobei es wahrscheinlich Sinn ergeben würde, dat Dingen erstmal auf den aktuellen Stand zu bringen (Async wäre wichtig, aber auch VS Updates und vor allen Dingen .NET Core), und sich dann über C# Gedanken zu machen.

      Oder?

      LG

      Klaus
      Also ich finde es schon mal top das die begleitdateien zum Buch wieder erhältlich sind. Denn ich arbeite tatsächlich noch das Buch durch, und habe es bisher ohne begleitdateien machen müssen.
      Ich lese mir in der Mittagspause immer einen kleinen Teil durch und versuche es wenn möglich abends mit einem praktischen Beispiel. Da kommen die Dateien wie gerufen.
      Vielen Dank dafür.
      Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

      loeffel schrieb:

      noch keine Verwendung der Dinge (wie eben Klassen)

      VB.NET-Quellcode

      1. Public Class Adresse
      ist allerdings Dein Code.
      In diesem Kontext hättest Du natürlich drauf verzichten können.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      VB-Fragen über PN / Konversation werden ignoriert!
      @Löffel: Sehe ich das richtig, dass da nur die 2010er-Beispiele veröffentlicht sind?
      Kannste vlt. mindestens noch die 2005er-Beispiele dazupacken?

      Weil für blutige Anfänger finde ich das 2005er Buch nachwievor am besten geeignet, weil das geht am gründlichsten auf die Grundlagen ein, welche bei den späteren Ausgaben notgedrungen um einiges zusammengestrichen sind.
      Ich empfehle Anfängern immer "Löffi2005", und wer sich den Kopf dann noch mit weiterem "Schnickschnack" zuballern will (Extension-Methods, Linq, Wpf, ...), der soll die späteren Ausgaben dazu lesen (und kann dann bischen was überblättern)
      Hey, hätte nicht gedacht, mal die Chance zu bekommen, mit dem Author dieser angepriesenen Werke direkt in Kontakt zu kommen.
      Eine Veröffentlichung des gesamten Buches würde ich begrüßen. Bin persönlich C#-Entwickler (wobei ich allerdings mit VB einstieg) und hätte im Moment ausreichend Zeit mich hin und wieder um eine mögliche Konvertierung zu kümmern.

      Allerdings würde ich in diesem Fall den Vorschlag machen, die Sache gleich gründlich anzugehen, das beste aus allen Büchern heranzunehmen und dann direkt eine neue Version daraus zu basteln, mit allen neuen Sprachfeatures, Framework-Versionen usw.
      Seit 2010 ist wirklich eine Menge dazu gekommen. Große Teile im Threading-Segment sollten mmn durch async komplett ersetzt werden, manuelles implementieren von Multithreading ist nur noch in Einzelfällen notwendig. Zumindest in C# hat sich seitdem auch einiges an der Syntax vereinfacht, wie das genau in VB aussieht weiß ich nicht.

      Vielleicht lässt sich sogar VB und C# gleich in ein Buch packen, denn gerade in den Grundlagen unterscheiden sich die beiden Sprachen geradezu gar nicht ausgenommen der Syntax. Beide Sprachen gleichermaßen zu verstehen erleichtert so manches, einschließlich Codes zu übersetzen sowie Code aus dem Internet zu beziehen. Pluspunkt wäre auch, dass man in dem Fall gar nicht in Versuchung kommt, irgend welche VB6-Altlasten anzuschleppen.
      Hallo alle,

      Auf Vorschlag von @ErfinderDesRades habe ich die Beispiele vom VB2005 und 2003 im Github-Repo ergänzt.
      Links zum Zip findet ihr oben im aktualisierten Post.

      Wegen des open-sourcens der eigentlichen Buchtexte, muss ich mit Sarika klären, ob sie mitzieht, und ich muss klären, ob die Texte vom Stil des typografischen Satzes bereinigt werden müssen, weil die Formatvorlage, auf der die Bücher basieren, unter Umständen ebenfalls urheberrechtlich geschützt sind, und ich bin mir nicht sicher, ob Rechte verletzt würden, ohne die Kapitel in einem anderen Formatierungsstil neu zu setzen.