<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: William F. Gilreath </title>
    <description>The latest articles on Forem by William F. Gilreath  (@wgilreath).</description>
    <link>https://forem.com/wgilreath</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F638354%2Ff6d9dfd2-c408-47f8-99c5-a56fddf4258f.png</url>
      <title>Forem: William F. Gilreath </title>
      <link>https://forem.com/wgilreath</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wgilreath"/>
    <language>en</language>
    <item>
      <title>What the do-while is ZeptoN?</title>
      <dc:creator>William F. Gilreath </dc:creator>
      <pubDate>Mon, 13 May 2024 11:12:18 +0000</pubDate>
      <link>https://forem.com/wgilreath/what-the-do-while-is-zepton-21gp</link>
      <guid>https://forem.com/wgilreath/what-the-do-while-is-zepton-21gp</guid>
      <description>&lt;h2&gt;
  
  
  Introducing Yet Another Umpteenth Programming Language
&lt;/h2&gt;

&lt;p&gt;Yikes, gadzooks, and shiver my timbers! Yet another "new" programming language? Yes, Virginia, another new programming language. ZeptoN. &lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;So what the do-while is ZeptoN? Simple, ZeptoN is a simple programming language designed with two objectives...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Simple learning language with common syntax style and structure.&lt;/li&gt;
&lt;li&gt;A programming language for quick-and-dirty “throwaway programs.”&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My Programming History
&lt;/h2&gt;

&lt;p&gt;As a young boy and a teenager, I cut my teeth learning to program several programming languages. The first was the infamous and ubiquitous BASIC, and then the other was Pascal. This was the 1980s and the home computer revolution was underway. I describe how I got into software &lt;a href="https://bit.ly/will_soft_start"&gt;here&lt;/a&gt;, and getting into programming led me to become a senior software engineer. &lt;/p&gt;

&lt;p&gt;Yet, one key feature of BASIC and Pascal was simplicity. Perhaps too simple in some ways, but the simplicity allowed the newbie or “noob” coder to start writing, running, and tinkering with code. I had subscriptions to “COMPUTE!” and bought programming books when I went to the mall. Yet I could type in a program, run the code; and often computer games. &lt;/p&gt;

&lt;h2&gt;
  
  
  BASIC Text Adventure
&lt;/h2&gt;

&lt;p&gt;I went so far as to write my own “electronic novel” which was a shameless imitation of some of the popular text adventures from Infocom, Adventure International. Mine was a murder mystery that “borrowed” from some other games, including the role-playing ones from companies like SirTech. The games were first written in BASIC, ultimately reaching GW-BASIC, and then later Turbo Pascal. &lt;/p&gt;

&lt;p&gt;This was more for the fun of creating, and to impress friends to see if they could find the clues and solve the mystery. From this fascination with text adventures, I learned compiler theory concepts like lexical analysis, syntax, parsing, BNF, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep It Simple Silly
&lt;/h2&gt;

&lt;p&gt;Yet, there was the simplicity of BASIC and Pascal. Both programming languages were simple enough to teach important programming concepts, and often not formally. Then both programming languages were powerful enough and expressive enough to do neat and cool things, like my own text adventure.&lt;/p&gt;

&lt;p&gt;Now, when I look at introductory programming courses, powerful programming languages are often used--like Java, C++, and so forth. Great that mainstream languages are utilized that are in demand, there is only one small problem: Java, C++, C# and Swift languages are very complex as they use the object-oriented paradigm. For a noob or newb for newbie coder, that is a challenging and often frustrating language to learn. I initially experienced that at university, when the computer science department switched from a Pascal curriculum to a C++ one. The big frustration was going from a structured to an object-oriented paradigm. &lt;/p&gt;

&lt;h2&gt;
  
  
  Learn to Fly with a Jetliner
&lt;/h2&gt;

&lt;p&gt;The simile I use is using Java/C++/C#/Swift etc. is like learning to fly a plane by learning to pilot a Boeing 747 or Airbus A330. Powerful aircraft, but overloading in terms of features, controls, and operation. Kernighan [Kerni 1981] even wrote that “Comparing C and Pascal is rather like comparing a Learjet to a Piper Cub — one is meant for getting something done while the other is meant for learning.” &lt;/p&gt;

&lt;p&gt;Yet, in this case, ZeptoN is meant for learning. ZeptoN has C/C++/Java syntax, so that the most ubiquitous syntax style is used so is familiar, and ZeptoN transpiles or transcompiles from ZeptoN into Java. Thus ZeptoN leverages Java ubiquity and platform neutrality. Hence a newb can code ZeptoN on the MacOS, Linux, or Windows platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Back To BASIC
&lt;/h2&gt;

&lt;p&gt;One problem with BASIC (and to a lesser degree Pascal) was that each platform/computer--Atari 800, Commodore 64, IBM PC, Tandy 1000EX had its own “flavor” of BASIC. Thus one BASIC program for the TI99/4A was not quite compatible with the TRS-80 BASIC, etc. I often found myself “adapting” BASIC programs to the computer I had at the time. &lt;/p&gt;

&lt;p&gt;ZeptoN avoids this by using Java, and having a standard environment of 70+ functions and several standard constants so ZeptoN can run anywhere. &lt;/p&gt;

&lt;p&gt;All ZeptoN requires is a favorite JDK vendor, with a minimum of JDK 11 for the transcompiler or code editor, Zeptor. &lt;/p&gt;

&lt;p&gt;Moreover, ZeptoN is free (yes as in free beer) and open-source using the GNU GPL v3. Hence no cost, and no proprietary or secret “black box” tool to transpile ZeptoN programs into Java .class bytecode. &lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Ideas with Throwaway Programs
&lt;/h2&gt;

&lt;p&gt;As a senior software engineer with 30+ years of writing code, I do like to write “test” programs to try something, and then throw them away. ZeptoN’s simplicity makes this possible, so for an advanced coder to the noob coder, ZeptoN is for everyone! &lt;/p&gt;

&lt;p&gt;For more details and examples check out the ZeptoN programming language white paper, a 49-page PDF or ePub document, for more details, and some samples of ZeptoN programs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further Reading
&lt;/h2&gt;

&lt;p&gt;For more details and examples check out the ZeptoN programming language white paper, for more details, and some samples of ZeptoN programs.&lt;/p&gt;

&lt;p&gt;More about ZeptoN here: &lt;a href="https://github.com/wgilreath/ZeptoN"&gt;https://github.com/wgilreath/ZeptoN&lt;/a&gt; and on my home site: &lt;a href="https://www.wfgilreath.xyz/"&gt;https://www.wfgilreath.xyz/&lt;/a&gt; also then the code editor Zeptor: &lt;a href="https://github.com/wgilreath/Zeptor"&gt;https://github.com/wgilreath/Zeptor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's ZeptoN in action and in use on Zeptor on &lt;a href="https://www.youtube.com/watch?v=CYMPlRsGbVU"&gt;Youtube!&lt;/a&gt;. Enjoy the zither music... 😉 &lt;/p&gt;

&lt;p&gt;More articles to follow... 😜 about ZeptoN and Zeptor. Zept to it!&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[Kerni 1981] Kernighan, Brian W. "Why Pascal is Not My Favorite Programming Language,"&lt;br&gt;
Computing Science Technical Report No. 100, AT&amp;amp;T Bell Laboratories,&lt;br&gt;
April 2, 1981.&lt;br&gt;
&lt;a href="https://www.lysator.liu.se/c/bwk-on-pascal.html"&gt;https://www.lysator.liu.se/c/bwk-on-pascal.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://archive.org/details/pascal-not-my-favorite/page/n2/mode/1up"&gt;https://archive.org/details/pascal-not-my-favorite/page/n2/mode/1up&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Gilre 2024] Gilreath, William F. "Begin at the Beginning...My Start in Software Engineering," PDF (60K) &lt;a href="https://bit.ly/will_soft_start"&gt;https://bit.ly/will_soft_start&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Gilre 2022] Gilre 2022, Gilreath, William F. "ZeptoN Programming Language," ePub (5.7Mb) &lt;a href="https://wgilreath.github.io/ZeptonWhitePaper.epub"&gt;https://wgilreath.github.io/ZeptonWhitePaper.epub&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Gilre 2022] Gilre 2022, Gilreath, William F. "ZeptoN Programming Language," PDF (5.yMb) &lt;a href="https://wgilreath.github.io/ZeptonWhitePaper.pdf"&gt;https://wgilreath.github.io/ZeptonWhitePaper.pdf&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>java</category>
      <category>coding</category>
    </item>
    <item>
      <title>Essay Why the GNU General Public License v3?</title>
      <dc:creator>William F. Gilreath </dc:creator>
      <pubDate>Sat, 22 Jul 2023 20:44:08 +0000</pubDate>
      <link>https://forem.com/wgilreath/essay-why-the-gnu-general-public-license-v3-2bec</link>
      <guid>https://forem.com/wgilreath/essay-why-the-gnu-general-public-license-v3-2bec</guid>
      <description>&lt;h2&gt;
  
  
  Choosing an Open Source License for Your Software Project
&lt;/h2&gt;

&lt;p&gt;How I chose an open source license for my own software projects...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The challenge in choosing an open-source license is the “paradox of choice” [Wikip 2023] with too many options of many licenses to choose from. Yet in choosing the open-source license, I took the approach of having the primary, paramount goal, and then going from specific to general. Let the choice be driven by the primary goal, what the software project and the software development engineer intentions and motivation. The goal drives the choice of open-source license.&lt;/p&gt;

&lt;p&gt;My goal was to share my software source code, and a want to keep any improvements by others and myself open, going forward into the future.&lt;/p&gt;

&lt;p&gt;I choose and use the GNU GPL Public License v3 [Free 2007a] with my own open-source projects as I want to share the code with others, yet I want any improvements, tweaks, optimizations to also remain open. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am a senior software development engineer, a coder, a programmer. I have been writing code since I was at least ten-years old. Hence I love to write code, debug code, and create algorithms. As a software engineer, I do my work at work, however I also love to create my own software projects. &lt;/p&gt;

&lt;p&gt;Some of my software projects [Gilre 2023], as I write this essay, are Py7 "pi-seven" a Python lint [Py7 2023], code check utility written in Python which I recently deployed in a repository "a repo" on GitHub. &lt;/p&gt;

&lt;p&gt;A longer-term passion project is ZeptoN [ZeptoN 2023] which is a programming language that transpiles or transcompiles into Java bytecode. Along with ZeptoN is a simple less "feature complex" code editor is the ZeptoN code editor or "ZEPton code ediTOR" or Zeptor. Zeptor is both code editor, and has the ZeptoN transpiler built-in.&lt;/p&gt;

&lt;p&gt;Other projects are algorithms or data structures--such as the hash sort, binar sort, or a treap map (as yet not deployed or published on GitHub) and others include programming languages like Boz, and FunCL. Hence I enjoy creating "cool" and "neato" software projects I love to share online or on GitHub [Gilre 2023]. A great joy and thrill of mine is when others build on my software projects and use them.  &lt;/p&gt;

&lt;p&gt;Yet, while I give away my own software projects to anyone interested and curious to download, utilize, and tinker with the source code for a project. Still I want to share, now the question is to choose an open-source license. &lt;/p&gt;

&lt;p&gt;As Shakespeare wrote, "...ay, there's the rub;" (from “Hamlet,” Act III, Scene I, Line 72) to choose an open-source license can be difficult, if not challenging. The difficulty is in the "paradox of choice" [Wikip 2023]. With so many open-source licenses to choose from, it can be a greater challenge than writing the source code, debugging, and documenting a software project. &lt;/p&gt;

&lt;p&gt;This article is based on several articles, tools, that help to select an open source software license. In order to consider the problem more completely, I read articles about choosing an open source license: [FOSSA 2023], [GitHu 2023], [Salte 2020]. A good article had a table comparing open source licenses with features of each license [Snyk 2023]. Two online tools are a decision tree [Hess 2014], and then an interactive tool [Three 2008] to choose a license. All of these are very informative, and helpful. Yet they are tools, information about choosing an open source license. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method for Choosing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The method of choosing, and avoid getting overloaded, overwhelmed by the paradox of choice is very simple. It is the question of "What is the goal in open-sourcing the software project?" Of course, to share with others. 🤪&lt;/p&gt;

&lt;p&gt;Yet what is the overall goal, moving forward, with the open-source project. How do you want your open-source project to be utilized going forward? What is the goal going forward into the future? This the question to consider when selecting an open-source license for your software project.&lt;/p&gt;

&lt;p&gt;From the movie Antitrust [IMBD 2001] the quote "Human knowledge belongs to the world." Anything I create in software, when not for an employer or under contract is mine, and I want to share that knowledge with the world, hence I choose to use the GNU General Public License version 3 [Free 2007a]. Build and improve on my software, and share it back, give it back. I care about sharing improvements. Two other questions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How open do you want your project?" My answer is: I want to share, but others should share too.&lt;/li&gt;
&lt;li&gt;"Do you want to enable commercial adoption?" My answer is also: Sure, but other should share by opening their code too.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For my own open-source projects, I want to share my source code, but I more importantly I want to share the improvements in the same context. Thus I want improvements, additions, optimizations, new features to be shared as I share them--those changes are based upon the software project I created. &lt;/p&gt;

&lt;p&gt;Hence I want the software project to remain as open initially. Thus the goal of sharing improvements going forward, requires a copyleft license. &lt;/p&gt;

&lt;p&gt;Ultimately, the best current license is the GNU General Public License version 3. &lt;/p&gt;

&lt;p&gt;This process is the reverse of decision tree, start from goal, and then break down specifics--go from specific and then see if the questions fit the overall goal. In my case GNU GPL v3, although I have considered the GNU Affero General Public License (Affero GPL) [Free 2007b] which covers use of the software over a network.&lt;/p&gt;

&lt;p&gt;The GNU GPLv3 also lets people do almost anything they want with your project, except distributing closed source versions. Example software projects: Bash and GIMP use the GNU GPLv3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GNU GPLv3 Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The properties and features of the GNU GPL v3 are: attribution, same context, same license for improvements, or: attribution, view Source, share-alike combinations, and share-alike transformations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Attribution: The original credits must be incorporated verbatim into the artifact produced by the reuse. For example, the composer of a song with this restriction must be listed in the credits of a video if that song is used as its sound track.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;View Source: The source file/s for the work must remain accessible to the public. For example, a song created with a music editor like Fruityloops must be released in both its final (mp3) and source (.flp) formats. (The Combinations and Transformations rights dictate whether reuse includes the right to modify such source file/s.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share-alike Combinations: Whatever license terms restrict the original artifact must restrict other works combined with it in the future. For example, if a composer makes her song freely available for noncommercial purposes, then a video incorporating that song must also be available under the same terms. Also called "copyleft".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share-alike Transformations: Whatever license terms restrict the original artifact must restrict reuses as well. For example, if a composer makes her song freely available for noncommercial purposes, then a remix of that song must also be available under the same terms. Also called "copyleft".&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are many a variety of open-source licenses for a software development engineer to choose from for their own projects shared online on the Internet. The difficulty is the simple question of “Which license do I want to use?” With so many choices, the simple choice of a license can be daunting--the paradox of choice [Wikip 2023].&lt;/p&gt;

&lt;p&gt;The approach I used in choosing a license was to start with my goal, share and keep improvements open. From that I then looked at the various open-source licenses, and found the various points addressed by the license. &lt;/p&gt;

&lt;p&gt;This specific to general approach is turning the decision tree upside down, and proceed bottom up then from the license see the various questions, points addressed in selecting the license top down. &lt;/p&gt;

&lt;p&gt;Afterward, one can follow the decision tree to the specific license by the questions, decisions and see the points in series for that license. This verifies from top down, the bottom up decision from the paramount goal of the software project. &lt;/p&gt;

&lt;p&gt;Thus the complex challenge of so many open-source licenses is simplified, reduced to the simple question of the primary goal, and then some following questions. All reflect the intentions and motives of the creator or team of a software project, not just now but going forward into the future. &lt;/p&gt;

&lt;p&gt;Choose wisely...to fit your goal, intentions and motivations for now and the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[FOSSA 2023] FOSSA, Inc. “How to Choose the Right Open Source License,” &lt;br&gt;
&lt;a href="https://fossa.com/blog/how-choose-right-open-source-license"&gt;https://fossa.com/blog/how-choose-right-open-source-license&lt;/a&gt;, 2023, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Free 2007a] Free Software Foundation, “GNU General Public License version 3,” &lt;a href="https://www.gnu.org/licenses/gpl-3.0.en.html"&gt;https://www.gnu.org/licenses/gpl-3.0.en.html&lt;/a&gt;, June 2007, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Free 2007b] Free Software Foundation. “GNU Affero General Public License,” &lt;a href="https://www.gnu.org/licenses/agpl-3.0.en.html"&gt;https://www.gnu.org/licenses/agpl-3.0.en.html&lt;/a&gt;, November 2007, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Gilre 2023] Gilreath, William F. “William F. Gilreath GitHub Repository,” &lt;a href="https://github.com/wgilreath"&gt;https://github.com/wgilreath&lt;/a&gt;, July 2023, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[GitHu 2023] GitHub, Inc. “Choose an open source license,”&lt;br&gt;
&lt;a href="https://choosealicense.com"&gt;https://choosealicense.com&lt;/a&gt;, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Hess 2014] Hess, Ken, "Decisions, decisions. How do you choose an open source license?"&lt;br&gt;
&lt;a href="https://www.zdnet.com/article/decisions-decisions-how-do-you-choose-an-open-source-license"&gt;https://www.zdnet.com/article/decisions-decisions-how-do-you-choose-an-open-source-license&lt;/a&gt;, October 29 2014. Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[IMBD 2001] IMDB, Inc. “Antitrust”, &lt;a href="https://www.imdb.com/title/tt0218817"&gt;https://www.imdb.com/title/tt0218817&lt;/a&gt;, January 21, 2001, Accessed July 21 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Py7 2023] py7 or π-7 Python Code Check Linting Tool, &lt;a href="https://github.com/wgilreath/py7"&gt;https://github.com/wgilreath/py7&lt;/a&gt;. Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Salte 2020] Salter, Jim. “Open source licenses: What, which, and why,”&lt;br&gt;
&lt;a href="https://arstechnica.com/gadgets/2020/02/how-to-choose-an-open-source-license"&gt;https://arstechnica.com/gadgets/2020/02/how-to-choose-an-open-source-license&lt;/a&gt;, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Snyk 2023] Snyk Limited, "Open Source Licenses: Types and Comparison," &lt;br&gt;
&lt;a href="https://snyk.io/learn/open-source-licenses"&gt;https://snyk.io/learn/open-source-licenses&lt;/a&gt;, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Three 2008] Three.org The Open Art Network, "License Chooser," December 2008,&lt;br&gt;
&lt;a href="http://three.org/openart/license_chooser"&gt;http://three.org/openart/license_chooser&lt;/a&gt;, Accessed July 21, 2023. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[Wikip 2023] Wikipedia contributors, “Paradox of Choice,” &lt;a href="https://en.wikipedia.org/wiki/The_Paradox_of_Choice"&gt;https://en.wikipedia.org/wiki/The_Paradox_of_Choice&lt;/a&gt;, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[ZeptoN 2023] ZeptoN Programming Language, &lt;a href="https://github.com/ZeptoN-Programming-Language"&gt;https://github.com/ZeptoN-Programming-Language&lt;/a&gt;, Accessed July 21, 2023.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>howto</category>
      <category>github</category>
    </item>
  </channel>
</rss>
